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

cru*_*nk1 12 python oop inner-classes python-2.7

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

class Foo(object):

  class A(object):
    pass

  class B(object):
    other = A
Run Code Online (Sandbox Code Playgroud)

class Foo(object):

  class A(object):
    pass

  class B(object):
    other = Foo.A
Run Code Online (Sandbox Code Playgroud)

各自的结果:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Isr*_*man 9

这是不可能的,因为您在类中定义的所有内容仅在该类的实例中成为有效成员,除非您使用 定义方法@staticmethod,但类没有这样的属性。

所以,这也行不通:

class Foo(object):
    x = 10

    class A(object):
        pass

    class B(object):
        other = x
Run Code Online (Sandbox Code Playgroud)

起作用,但这不是您想要的:

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)
Run Code Online (Sandbox Code Playgroud)

输出是:

<class '__main__.Foo.A'>
Run Code Online (Sandbox Code Playgroud)

这样做的原因是方法(在这种情况下__init__)在创建对象时__init__被评估,而在读取和解释类时评估之前的赋值。

你可以通过简单地在自己的模块中定义所有类来获得你想要的东西。导入模块,使其成为一个对象,其字段是您在其中定义的类。

  • 感谢您将我从“为什么要在 Python 中这样做?”的问题中解救出来。论证并帮助我理解。 (4认同)