所以,我在一个文件中有这两个数据类:
@dataclass
class A:
children: List[B]
@dataclass
class B:
parent: A
,这可以通过使用 __future__.annotations
特性来实现。
然后我有另外两个文件,每个文件都有一堆针对每种类型的对象,这些对象对于我的项目来说是静态的。
文件 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
)
很明显,文件之间存在循环依赖问题,但即使它们在同一个文件中也不行,因为一种类型的变量依赖于另一种类型的变量才能成功。
初始化 obj_a1
中的 B
对象也不会起作用,因为这里没有 self
的概念。
目前,我将 parent
设置为 None
(针对类型提示),然后在 obj_a1
上循环以设置它们:
for obj_b in obj_a1.children:
obj_b.parent = obj_a1
伙计们有什么好主意吗?
不知道是否有帮助,但这些对象是静态的(它们在这些声明后不会改变)并且它们具有某种父子关系(正如您肯定已经注意到的那样)。
如果可能的话,我希望将每种类型的变量放在不同的文件中。
最佳答案
我知道我迟到了,但我会在这里留下我的答案供其他人使用。
根据 PEP 563 , python 3.7 引入了注释的惰性求值,这在循环依赖的情况下非常有用。
@dataclass
class StudentData:
school: 'SchoolData'
@dataclass
class SchoolData:
students: StudentData
如您所见,SchoolData
类型注释包含在引号内,这样您就可以在声明之前引用 SchoolData
类型。
关于Python:数据类/前向变量声明的循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61512751/