我有一个方法“ method1”的父类“ Parent”。该方法使用了我想从子类“ Child”访问的变量“ 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”,并在Parent类的 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
答案 0 :(得分:0)
问题在于您永远不会在任何地方调用method1
,因此self.b
永远不会设置为值2
。
您只需删除整个method1
并让Parent
类像这样:
class Parent(object):
def __init__(self):
self.a = 1
self.b = 2
OR
您可以在method1
类中调用Child
,例如:
class Child(Parent):
def __init__(self):
super(Child, self).__init__()
self.method1()
self.vara = self.a
self.varb = self.b