假设class A
有一个类型为 的成员class B
,并且class B
有一个类型为 的成员class A
。
在 Scala 或 Kotlin 中,您可以在这种情况下以任何顺序定义类而无需担心,因为第一个定义的类可以照常使用第二个定义的类,即使在案例/数据类中也是如此。
但是在 Python 中,下面的代码
class A:
b = B()
class B:
a = A()
抛出编译错误,因为class B
在定义时class A
未定义。
您可以解决这个简单的案例,就像在这个答案中一样
class A:
pass
class B:
a = A()
A.b = B()
但是,这种方式不适用于 Python 中的数据类,因为在定义数据类之后分配成员不会更新数据类的自动生成方法,这使得“数据类”的使用毫无用处。
@dataclass
class A:
b: B # or `b: Optional[B]`
@dataclass
class B:
a: A # or `a: Optional[A]`
我怎样才能避免这个问题?