是否可以从子类中超类的方法访问变量



我有一个父母类" 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

最新更新