Python - 从其他内部类引用内部类

时间:2017-02-12 08:09:24

标签: python python-2.7 oop inner-classes

我试图从另一个内部类引用内部类。我试过了两个:

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

这可能吗?

1 个答案:

答案 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__之前的赋值。

通过简单地定义自己模块中的所有类,您可以获得所需的相同内容。导入模块,使其成为一个对象,其字段是您在其中定义的类。