关于Python:Python – 从其他内部类引用内部类

Python - reference inner class from other inner class

我试图引用另一个内部类的内部类。我试过两种方法:

1
2
3
4
5
6
7
class Foo(object):

  class A(object):
    pass

  class B(object):
    other = A

1
2
3
4
5
6
7
class Foo(object):

  class A(object):
    pass

  class B(object):
    other = Foo.A

结果如下:

1
2
3
4
5
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

1
2
3
4
5
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定义了一个方法,但类没有此类属性。

所以,这也不管用:

1
2
3
4
5
6
7
8
class Foo(object):
    x = 10

    class A(object):
        pass

    class B(object):
        other = x

这是可行的,但不是你想要的:

1
2
3
4
5
6
7
8
9
10
11
12
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)

输出是:

1
<class '__main__.Foo.A'>

这样做的原因是,创建对象时对方法(在本例中为__init__)进行评估,而在__init__之前的赋值则在读取和解释类时进行评估。

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