这是常见的循环导入问题的一个相当具体的例子。 我(我想)知道通用问题的所有常见答案,所以我想知道下面的例子中最佳做法是什么。
假设我们有一个包含许多相关类的模块(让我们称之为 shape.py )。例如,Point
,Line
和Polygon
类。
这些类中的每一个都有一个类方法,该方法通过使用文件中的数据填充类来返回该类的实例。
逻辑(?)布局是放置用于读取数据的类和方法,并在另一个模块中填充类。让我们称之为 reader.py 。这会出现 shape.py 需要导入 reader.py 以访问读取例程而 reader.py 需要导入的问题shape.py 以实例化类。
显而易见的解决方案是将 reader.py 的内容放在 shape.py 中。但我们并不是真的想这样做,因为它不是一个非常清晰的布局,我们的 reader.py 和 shape.py 模块已经很长了。
我在许多现有软件包中看到的解决方案是在类方法中使用本地导入。这看起来有点笨拙和脆弱,而且我在stackoverflow上看到的很多线程似乎被认为是一个警察而不是适当的重构。
那么,有更好的解决方案吗?