17

我有一个包含 3 个类的 Python 模块:A、A1 和 A2。A1 和 A2 派生自 A。A 包含对 A1 和 A2 进行操作的函数。

当它在一个 .py 文件中时,这一切都很好。但是该文件已经变得很长,我想将 A1 和 A2 拆分为它们自己的文件。尽管存在循环依赖,如何拆分此文件?

4

3 回答 3

12

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 你应该没问题,因为多亏了鸭子类型,你不需要导入实际名称。

于 2011-10-17T20:50:16.397 回答
2

尽管存在循环依赖,如何拆分此文件?

选项 1:打破循环:将基类放在自己的模块中,将派生类放在附加模块中,将在这些派生类上运行的函数放在另一个模块中。


选项 2:忽略循环,仅将模块/包导入全局命名空间,IE:

foo.py

class Bar:
    "Frobs Quuxen"

永远不应该导入为from foo import Bar,只需根据需要在函数中使用import foo和引用。foo.Bar

于 2011-10-17T20:50:05.303 回答
0

我认为你问题的核心是你不想要

a.py to imports a1
if
a1.py imports a.

但是,这在 python 中完全没问题。但是,请确保您在具有多个模块的系统中没有函数/类之外的任何代码,因为运行的顺序将根据您导入它的位置、导入的内容、月相而有所不同, ETC。

于 2011-10-17T20:47:29.410 回答