Предположим, что 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]'
Как я могу избежать этой проблемы?