如何将类属性分配给驻留在同一模块上的另一个类中的实例

时间:2013-06-21 09:00:42

标签: python

我无法解决这个问题:

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 个答案:

答案 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()存在,以便可以完美地调用它。