我有一个父母类" parent",其中具有方法" method1"。此方法使用了我想从子类"孩子"访问的变量" b"。当我尝试以self.b的方式访问它时,python抱怨"'child'对象没有属性'b'"。我是面向对象的编程和Python的新手。所以也许我的理解是不正确的。请帮助我解释为什么我无法访问" B"。
class Parent(object):
def __init__(self):
self.a = 1
def method1(self):
b = 2
class Child(Parent):
def __init__(self):
super(Child,self).__init__()
self.vara = self.a
self.varb = self.b
x = Child()
print x.vara
print x.varb
我添加了"自我"。变量" B"的预选赛,并在父类的 init 函数中添加了相同的内容,以为它会使子类可见。
class Parent(object):
def __init__(self):
self.a = 1
self.b = 1
def method1(self):
self.b = 2
class Child(Parent):
def __init__(self):
super(Child,self).__init__()
self.vara = self.a
self.varb = self.b
x = Child()
print x.vara
print x.varb
我期望输出为
1
2
因为我认为method1下的self.b会在 init 函数中覆盖self.b。但是,输出为
1
1
问题是您永远不会在任何地方致电method1
,因此self.b
永远不会设置为值2
。
您可以删除整个method1
,然后让Parent
类如下:
class Parent(object):
def __init__(self):
self.a = 1
self.b = 2
或
您可以在Child
类中调用method1
,例如:
class Child(Parent):
def __init__(self):
super(Child, self).__init__()
self.method1()
self.vara = self.a
self.varb = self.b