我正在编写一个用于科学数据分析的应用程序,我想知道构造代码以避免(或解决)循环导入问题的最佳方法是什么。目前我正在使用面向对象和过程编程的混合。
其他问题以更抽象的方式解决了这个问题。在这里,我正在寻找在更具体的上下文中最佳的解决方案。
我Container
定义了一个类,DataLib.py
其数据包含在列表和/或数组中。所有方法和支持功能DataLib.py
都非常大(〜1000行)。
我有第二个模块SelectionLib.py
(约 400 行),它仅包含Container
根据不同标准“过滤”数据的功能。这些函数返回新Container
对象(带有过滤数据),因此SelectionLib.py
需要Container
从DataLib.py
. 请注意,从逻辑上讲,这些函数是“容器”的“方法”,它们只是使用 python 函数实现的。
现在,我想添加一些高级方法,Container
以便可以使用方法调用的单个函数执行复杂的分析。“复杂分析”是指任意数量的Container
方法调用、本地函数(在 DataLib.py 中定义)和过滤器函数(在 中定义SelectionLib.py
)。
所以问题是DataLib.py
需要导入SelectionLib.py
才能使用过滤器功能,但SelectionLib.py
已经导入了DataLib.py
。
正确知道我的 hackish 解决方案是使用run -i ...从IPython运行这两个文件,所以它就像拥有一个大的单个文件,并且我避免了循环导入。但与此同时,这些脚本很难集成到例如 GUI 中。
你建议如何解决这个问题:
使用纯OO和继承并将对象拆分为3:
CoreContainer
->SelectionContainer
->HighLevelContainer
重构代码(一个文件中的所有内容?)
某种进口诡计(将导入放在最后)
任何反馈表示赞赏!