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

时间:2019-05-02 12:46:11

标签: python

我有一个方法“ 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

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