我无法解决这个问题:
class Clazz:
EMPTY=Clazz1(None,None)
def __init__(self):
self.item=Clazz1("a","b")
class Clazz1:
def __init__(self,key,value):
self.key=key
self.value=value
if __name__=='__main__':
h=Clazz()
当我尝试运行它时返回:
Traceback (most recent call last):
File "C:\Users\Desktop\test.py", line 1, in <module>
class Clazz:
File "C:\Users\Desktop\test.py", line 2, in Clazz
EMPTY=Clazz1(None,None)
NameError: name 'Clazz1' is not defined
有什么想法吗?提前致谢
答案 0 :(得分:3)
Clazz1
:之前定义 Clazz
class Clazz1:
def __init__(self, key, value):
self.key = key
self.value = value
class Clazz:
EMPTY = Clazz1(None, None)
def __init__(self):
self.item = Clazz1("a", "b")
if __name__ == '__main__':
h = Clazz()
答案 1 :(得分:2)
您应该将Clazz1定义放在Clazz之前。 如果您不这样做,Clazz无法看到Clazz1
答案 2 :(得分:2)
只需更改类的顺序(并阅读python中的执行顺序)。您可能会发现这有用http://pythontutor.com/visualize.html
class Clazz1:
def __init__(self,key,value):
self.key=key
self.value=value
class Clazz:
EMPTY=Clazz1(None,None)
def __init__(self):
self.item=Clazz1("a","b")
if __name__=='__main__':
h=Clazz()
答案 3 :(得分:1)
在需要时,Clazz1
尚不存在。
类定义立即执行,因此必须在Clazz1
之前定义Clazz
。
注意与fuinction定义的区别,其中引用的名称必须在运行时存在:
def func():
test = func1()
def func1():
pass
if __name__=='__main__':
func()
最后在最后调用func()
时,func1()
存在,以便可以完美地调用它。