假设class A
有一个成员,其类型为class B
,而class B
也有一个成员,其类型为class A
。
在Scala或Kotlin中,您可以以任何顺序定义这些类而不必担心此情况,因为先定义的类可以像往常一样使用后定义的类,即使在case/data类中也是如此。
然而,在Python中,以下代码:
class A:
b = B()
class B:
a = A()
当定义class A
时,由于没有定义class B
,会抛出编译错误。
对于这种简单情况,您可以像此答案中那样解决它。
class A:
pass
class B:
a = A()
A.b = B()
然而,这种方式在Python中的数据类上不起作用,因为在定义数据类后分配成员将不会更新数据类的自动生成方法,这使得“data class”的使用无效。
@dataclass
class A:
b: B # or `b: Optional[B]`
@dataclass
class B:
a: A # or `a: Optional[A]`
我该如何避免这个问题?