Предположим, что class A
имеет члена с типом class B
, а class B
имеет члена с типом class A
.
В Scala или Kotlin вы можете определять классы в любомв этом случае не беспокойтесь, потому что первый определенный класс может использовать второй определенный класс, как обычно, даже в случае case / data.
Однако в 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]`
Как мне избежать этой проблемы?