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

标签 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

这可能吗?

最佳答案

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

所以,这也行不通:

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__ 之前的赋值进行求值阅读和解释。

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

关于Python - 从其他内部类引用内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185472/

相关文章:

python - 强制乘法使用 __rmul__() 而不是 Numpy 数组 __mul__() 或绕过广播

python - 如何将多个图像输入 Keras 特征提取?

python - 复数的表示法不一致

python - 如何使用 Drive API 在 Google 电子表格中获取工作表列表(名称和 "gid")?

c++ - "Error: no matching function for call distance::distance()"...无法从 main 中的类声明对象?

python - 字典值的总和列表

python - 执行没有多处理池映射的进程列表

python - 发出请求时,x-auth-token 未在 header 中传递

language-agnostic - 对象和实例有什么区别?

c++ - 管理事件 : pointer or instance? 的传播