我正在尝试使用全局变量调用类的方法,但我的逻辑似乎有问题。
在下面的代码中,A
调用B
,调用调用C
方法的B
。
x = None
class A():
def __init__(self):
global x
x = B()
class B():
def __init__(self):
C()
def bla(self):
print('bla')
class C():
def __init__(self):
global x
x.bla()
A()
我得到的错误:
AttributeError: 'NoneType' object has no attribute 'bla'
我错过了什么?
答案 0 :(得分:6)
执行 gridlines: {
color: 'none'
}
后,调用x = B()
的结果无法分配到B()
,直到 x
完成初始化后的。但是在创建B实例时会调用B
,并立即调用B.__init__()
。换句话说,当你执行C()
时,事情按此顺序发生:
x = B()
B.__init__()
(由于C.__init__()
中的C()
)B.__init__()
的结果分配给B()
。但是第3步永远不会发生,因为x
会引发错误,因为第3步尚未发生,因此尚未将对象分配给C.__init__()
。
目前尚不清楚您在此处尝试完成的任务,因此很难说如何最好地更改代码。 x
无法使用在C.__init__
完成运行之后才会定义的变量。
答案 1 :(得分:0)
这是你的问题
你说 x = b() 好吧,在b完成初始化之前,x是无...这也意味着直到c完成初始化,否则会导致C类出现问题x.bla()
答案 2 :(得分:0)
这是因为在完成为每个类调用init函数之前,x尚未完全初始化。在这里,您尝试在完成初始化之前访问全局x。