【发布时间】:2013-04-10 05:03:47
【问题描述】:
如果我有“a.py”
from google.appengine.ext import db
class A(db.Model):
db.ReferenceProperty(b.B)
...other stuff
和另一个文件“b.py”
from google.appengine.ext import db
class B(db.Model):
db.ReferenceProperty(a.A)
...other stuff
看起来 Python 根本不允许循环依赖。通常我猜你会改变代码,这样两个类实际上可以在不直接相互导入的情况下自行解析。也许是通过第三个中介来巩固他们对彼此的引用?但是我不能只使用普通的中间类,因为所有类最终都需要持久化到数据库中?是否有任何正确的解决方案来构建上述代码以使其正常工作?
我有一种感觉,我会得到很多“难闻的代码”、“解耦”、“糟糕的设计”等等。所以我问如果你这么说,请用一个实际的例子说明你会做什么。是否有任何解决方案需要保留引用、类和模块的原样?
谢谢。
【问题讨论】:
-
正如你所说,糟糕的代码气味 - 除了自然的程序员懒惰之外,为什么要在公共模块之外的类之间进行循环引用?
-
当你想要一个一对一的关系,两个持久对象可以相互引用时,你需要这个。
-
具体来说,我有一个问题(db.Model 实体),它应该有一个或多个答案(db.Model 实体)。然而,这些答案中的每一个都可能指向另一个问题,用于进一步澄清,或者指向一个结果(db.Model 实体)。
-
+1 因为实际上在某些情况下需要这些循环引用才能获得最佳解决方案。
-
这就像在 C 中工作,但不允许使用标题。