如何在python中访问父类的实例变量?
我想访问父类构造函数中定义的类变量。这是代码如何在python中访问父类的实例变量?,python,inheritance,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
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
def func(self):
print A.x
然后我得到一个错误:
NameError: global name 'x' is not defined
如果我尝试将func()
更改为
def func(self):
print x
def func(self):
print A.x
然后我得到了错误
AttributeError: type object 'A' has no attribute 'x'
现在我的想法快用完了。。访问父类A
中的类变量x
的正确方法是什么?谢谢
注意:我只处理项目中的“B类”部分,因此我不能真正修改A类并更改变量的定义方式。这是唯一的限制。您需要将其设置为
self.x=0
而不是x=0
——否则它只是一个局部变量
如果您不能修改
A
,那么您试图做的是不可能的-绝对没有办法访问该值,即使使用黑魔法也不行(如果您的方法被该方法调用,您可能会用堆栈做一些讨厌的事情来获取其值)它必须是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
A类(对象):
定义初始化(自):
x=0
def foo(self):
print(self.x)#请看我问题底部的注释。在这种情况下,您试图做的是不可能的。好吧,即使是最黑的黑色Python魔法也不能让您从函数访问局部变量,除非它在调用堆栈中(这里不是这种情况).我认为一些包含调试器并从本地名称空间窃取值的黑魔法可以做到这一点,但这不是事情应该怎么做的。但在方法执行后,他无法做到这一点-它将消失。也许你可以从GC中得到它,但如果它真的只是一个整数,他就无法知道它是他正在寻找的值(对于一个函数来说,这很容易)x
不是一个类变量。你似乎把局部变量与实例变量和类变量混淆了。