我试图从另一个内部类引用内部类。我试过了两个:
class Foo(object):
class A(object):
pass
class B(object):
other = A
和
class Foo(object):
class A(object):
pass
class B(object):
other = Foo.A
各自的结果:
Traceback (most recent call last):
File "python", line 1, in <module>
File "python", line 6, in Foo
File "python", line 7, in B
NameError: name 'A' is not defined
和
Traceback (most recent call last):
File "python", line 1, in <module>
File "python", line 6, in Foo
File "python", line 7, in B
NameError: name 'Foo' is not defined
这可能吗?
答案 0 :(得分:1)
这是不可能的,因为您在类中定义的所有内容都只在该类的实例中成为有效成员,除非您使用@staticmethod
定义方法,但类没有这样的属性。< / p>
所以,这也不会起作用:
class Foo(object):
x = 10
class A(object):
pass
class B(object):
other = x
会有效,但这不符合您的意图:
class Foo(object):
x = 10
class A(object):
pass
class B(object):
def __init__(self):
self.other = Foo.A
f = Foo()
print(f.B().other)
输出结果为:
<class '__main__.Foo.A'>
这样做的原因是在创建对象时评估方法(在本例中为__init__
),而在读取和解释类时评估__init__
之前的赋值。
通过简单地定义自己模块中的所有类,您可以获得所需的相同内容。导入模块,使其成为一个对象,其字段是您在其中定义的类。