在python中多次导入

时间:2011-10-24 10:21:22

标签: python google-app-engine

人们如何解决这个问题:

控制器(比如controller.py)导入两个模型(比如a_model.py和b_model.py):

from app.model import a_model
from app.model import b_model

现在让我们说a_model想要在b_model中使用一个函数(假设它想从b_model获取一些东西,其中记录的id来自a_model中的查询,所以我做(在a_model中):

from app.model import b_model

既然我们的控制器已经导入了b_model.py并且a_model.py试图这样做,我们就会破坏应用程序。

有人可以告诉我最好的方法吗?也许使用代理?还是图书馆装载机?

3 个答案:

答案 0 :(得分:6)

从Python中的两个不同模块导入模块没有问题。也许你的特定设计使它成为一个问题,但它不是Python所强加的。

无论如何,您可以通过将常见内容从a_modelb_model移动到其他模块(即model_common)并从a_modelb_model导入来解决问题。 {{1}}。

答案 1 :(得分:4)

只要您没有cicrcular引用即可,即

main --> model.a_model -> model.b_model
     \-> model.b_model

没关系。

但是如果你从import a_model添加b_model.py,事情会变得复杂,因为没有办法以这样的方式订购加载,即每个模块都会满足所有先决条件。

Python不像人们期望的那样处理这种情况,而不是报告循环导入,在其中一个模块中引发了有关未定义符号的异常。

答案 2 :(得分:1)

这是你想要做的吗?

class A(db.Model):
  b = db.ReferenceProperty(B)

class B(db.Model):
  a = db.ReferenceProperty(A)

如果是这样,那么简单的解决方法可能是将其中一个变为弱引用:

class A(db.Model):
  b = db.ReferenceProperty()

class B(db.Model):
  a = db.ReferenceProperty(A)

毫无疑问,这是一个糟糕的解决方案。我不确定是否有更好的方法。