【发布时间】:2019-06-23 22:49:35
【问题描述】:
当您有两个类需要具有相互引用的属性时
# DOESN'T WORK
class A:
b = B()
class B:
a = A()
# -> ERROR: B is not defined
standardanswers表示使用python是动态的,即。
class A:
pass
class B:
a = A()
A.b = B()
从技术上解决问题。但是,当存在三个或更多相互依赖的类时,或者当这些类超过几行时,这种方法会导致极难导航的意大利面条式代码。例如,我发现自己编写的代码如下:
class A:
<50 lines>
# a = B() but its set later
<200 more lines>
class B:
<50 lines>
a = A()
<100 lines>
A.b = B() # to allow for circular referencing
这最终会违反 DRY(因为我在两个地方编写代码)和/或将相关代码移动到我模块的两端,因为我不能将 A.b = B() 放在与之相关的类中。
有没有更好的方法来允许在 python 中循环依赖类属性,而不涉及将相关代码分散到模块的经常远离的部分?
【问题讨论】:
-
是的,更好的方法是拥有一个中间资源,这样您就没有循环依赖,即重新审视您的设计决策
标签: python python-3.x circular-reference