【发布时间】:2014-10-29 12:13:04
【问题描述】:
我需要创建一个业务查询模型,我需要在其中创建一个循环依赖,我正在使用一个看起来像 django 模型的设计来实现它,
#Modeule a.py
import b
class A:
b_obj = B()
a_property_1 = ObjectAttribute(b_obj.b_property_1) # a_property_1 is dependent on b_property_1
a_property_2 = ObjectAttribute(b_obj.b_property_2)
#Module b.py
import a
class B:
a_obj = A()
b_property_1 = ObjectAttribute(a_obj.a_property_1)
b_property_2 = ObjectAttribute(a_obj.a_property_2)
当我执行上述程序时,它会抛出一个错误,名称'B'在执行a.py时没有定义,反之亦然。
之后,我对此进行了一些研究,以找出 django 模型已经通过 ForeignKey 实现了类似的功能
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
我只需要实现我的 ForeignKey 模块,请有人帮助我理解逻辑并按以下格式编写代码。
#Modeule a.py
import b
class A:
b_obj = MyForeignKey('B')
a_property_1 = ObjectAttribute(b_obj.b_property_1) # a_property_1 is dependent on b_property_1
a_property_2 = ObjectAttribute(b_obj.b_property_2)
#Module b.py
import a
class B:
a_obj = MyForeignKey('A')
b_property_1 = ObjectAttribute(a_obj.a_property_1)
b_property_2 = ObjectAttribute(a_obj.a_property_2)
【问题讨论】:
-
附注:在 Python 2 中总是从“object”继承——你的类继承了“nothng”的形式(如
class A:)——在 Python 2 中,这会产生不实现的旧式类一些现代的属性获取机制,以及其他可能会让您大吃一惊的不兼容性。