我已经习惯了Python的打包机制,并努力了解如何避免循环导入。似乎很难开发一个基于类的模型,它具有类之间的关系,而不会影响循环依赖问题。
我对有许多课程和关系的情况感兴趣,但将其简化为一种简单的形式:
如果我有两个类A和B,它们之间有多对多的关系,以及方法A.getRelatedBs()和B.getRelatedAs(),那么将代码打包到模块和包中的最佳方法是什么?
将它们放入一次模块的解决方案可能适用于这种简单的情况,但是当有更多的类和关系时,它们不能大规模地工作。
这里的最佳做法是什么?
答案 0 :(得分:1)
我唯一一次遇到与循环依赖问题发生冲突是在一个类似的项目中,有许多小模块都在一起工作。答案是不要将导入模块中的任何名称导入当前模块名称空间,而是使用对其他模块的完全限定引用。
所以,而不是:
from foo import Foo,Foobar
from bar import Bar,Barbaz
class Zuul(Foo):
def do_something(self):
self.bar = Bar()
self.baz = Barbaz()
请改为:
import foo
import bar
class Zuul(foo.Foo):
def do_something(self):
self.bar = bar.Bar()
self.baz = bar.Barbaz()
Python尝试通过仅导入每个模块一次来解决循环导入问题。但是,如果您将这些导入的模块中的名称分配到您的模块中,那么它必须尝试遵守订单,这对于循环导入是不可能的。使用完全限定名称似乎回避了这个问题。它打字更多,但更安全。