如何在python中访问父类的实例变量?

时间:2016-08-20 19:31:31

标签: python inheritance

我想访问父类构造函数中定义的类变量。这是代码。

class A(object):
    def __init__(self):
        x = 0

class B(A):
    def __init__(self):
        super(B, self).__init__()

    def func(self):
        print self.x

s = B()
s.func()

这给了我错误:

AttributeError: 'B' object has no attribute 'x'

如果我尝试将func()更改为

def func(self):
    print x

然后我收到错误:

NameError: global name 'x' is not defined

如果我尝试将func()更改为

def func(self):
    print A.x

然后我收到错误

AttributeError: type object 'A' has no attribute 'x'

现在我的想法已经不多了..在父类x中访问该类变量A的正确方法是什么?谢谢!

注意:我只在" B&#34级工作;我项目的一部分,因此我无法修改A类并更改变量的定义方式。这是唯一的限制因素。

2 个答案:

答案 0 :(得分:4)

必须是self.x,而不仅仅是x

class A(object):
    def __init__(self):
        self.x = 0

快速记录 - 即使是A的其他方法,x也无法访问:

class A(object):
    def __init__(self):
        x = 0
    def foo(self):
        print(self.x) # <- will not work
        print(x) # <- will utimately not work

答案 1 :(得分:1)

您需要将其设置为self.x = 0而不是x = 0 - 否则它只是一个局部变量。

如果您无法修改A,那么您尝试做的事情是不可能的 - 绝对无法访问该值,即使使用黑魔法也是如此(如果您的方法称为通过这种方法,你可能会在堆栈中做一些讨厌的事情来获得它的价值)