我有一个包含 3 个类的 Python 模块:A、A1 和 A2。A1 和 A2 派生自 A。A 包含对 A1 和 A2 进行操作的函数。
当它在一个 .py 文件中时,这一切都很好。但是该文件已经变得很长,我想将 A1 和 A2 拆分为它们自己的文件。尽管存在循环依赖,如何拆分此文件?
我有一个包含 3 个类的 Python 模块:A、A1 和 A2。A1 和 A2 派生自 A。A 包含对 A1 和 A2 进行操作的函数。
当它在一个 .py 文件中时,这一切都很好。但是该文件已经变得很长,我想将 A1 和 A2 拆分为它们自己的文件。尽管存在循环依赖,如何拆分此文件?
modA.py:
class A(...):
...
modA1.py:
import modA
class A1(modA.A):
...
modA2.py:
import modA
class A2(modA.A):
...
模组:
from modA import A
from modA1 import A1
from modA2 import A2
即使 A “处理” A1s 和 A2s 你应该没问题,因为多亏了鸭子类型,你不需要导入实际名称。
尽管存在循环依赖,如何拆分此文件?
选项 1:打破循环:将基类放在自己的模块中,将派生类放在附加模块中,将在这些派生类上运行的函数放在另一个模块中。
选项 2:忽略循环,仅将模块/包导入全局命名空间,IE:
class Bar:
"Frobs Quuxen"
永远不应该导入为from foo import Bar
,只需根据需要在函数中使用import foo
和引用。foo.Bar
我认为你问题的核心是你不想要
a.py to imports a1
if
a1.py imports a.
但是,这在 python 中完全没问题。但是,请确保您在具有多个模块的系统中没有函数/类之外的任何代码,因为运行的顺序将根据您导入它的位置、导入的内容、月相而有所不同, ETC。