Python: круговая зависимость классов данных / прямое объявление переменных? - PullRequest
0 голосов
/ 30 апреля 2020

Итак, у меня есть эти два класса данных в файле:

@dataclass
class A:
    children: List[B]

@dataclass
class B:
    parent: A

, что возможно при использовании функции __future__.annotations.

Затем у меня есть два других файла, каждый с кучей объектов для каждого типа, которые являются stati c для моего проекта.

Файл objects_A:

import objects_B

obj_a1 = A(
    children=[
        objects_B.obj_b1,
        objects_B.obj_b2
    ]
)

Файл objects_B:

import objects_A

obj_b1 = B(
    parent=objects_A.obj_a1
)

obj_b2 = B(
    parent=objects_A.obj_a1
)

Очевидно, что существует проблема циклической зависимости между файлами, но она не будет работать, даже если они находятся в одном и том же файле, поскольку переменная одного типа зависит от успеха другого.
Инициализация B объекты внутри obj_a1 также не будут работать, так как здесь нет понятия self.

В данный момент я устанавливаю parent в None (против подсказок типа), и затем сделайте все oop на obj_a1, чтобы настроить их:

for obj_b in obj_a1.children:
    obj_b.parent = obj_a1

Любые люди с яркими идеями?
Не знаю, поможет ли это, но эти объекты устарели c (они после этих деклараций не изменится), и у них будут отношения типа «родители-дети» (как вы наверняка заметили).
Если возможно, Я хотел бы иметь переменные каждого типа в разных файлах.

...