我试图从另一个内部类引用一个内部类。我都尝试过:
class Foo(object):
class A(object):
pass
class B(object):
other = A
and
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
and
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
这可能吗?
这是不可能的,因为您在类中定义的所有内容仅在该类的实例中才成为有效成员,除非您定义一个方法@staticmethod
,但是类没有这样的属性。
所以,这也行不通:
class Foo(object):
x = 10
class A(object):
pass
class B(object):
other = x
This will工作,但这不是你想要的:
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__
在阅读和解释课程时进行评估。
通过简单地在自己的模块中定义所有类,您可以获得与您想要的相同的效果。导入模块使其成为一个对象,其字段是您在其中定义的类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)