1

我想不出解决这个问题:

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

任何想法?提前致谢

4

4 回答 4

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()
于 2013-06-21T09:02:58.113 回答
2

您应该将 Clazz1 定义放在 Clazz 之前。如果你不这样做,Clazz 就看不到 Clazz1

于 2013-06-21T09:03:20.970 回答
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()
于 2013-06-21T09:05:02.727 回答
1

在需要的时候,Clazz1还不存在。

类定义是立即执行的,所以Clazz1必须在之前定义Clazz

请注意与函数定义的区别,其中引用的名称必须在运行时存在:

def func():
    test = func1()

def func1():
    pass

if __name__=='__main__':
   func()

func()最后被调用时,func1()存在以便它可以完美地被调用。

于 2013-06-21T09:13:42.643 回答