我想访问父类构造函数中定义的类变量。这是代码。
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类并更改变量的定义方式。这是唯一的限制因素。
答案 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
,那么您尝试做的事情是不可能的 - 绝对无法访问该值,即使使用黑魔法也是如此(如果您的方法称为通过这种方法,你可能会在堆栈中做一些讨厌的事情来获得它的价值)