gpt4 book ai didi

Python:数据类/前向变量声明的循环依赖?

转载 作者:行者123 更新时间:2023-12-04 17:28:55 24 4
gpt4 key购买 nike

所以,我在一个文件中有这两个数据类:

@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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com