【问题标题】:How to split a Python module into multiple files?如何将 Python 模块拆分为多个文件?
【发布时间】:2011-12-09 14:26:06
【问题描述】:

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

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

【问题讨论】:

标签: python python-module


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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


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

    foo.py

    class Bar:
        "Frobs Quuxen"
    

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-01-02
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        • 2014-05-01
        • 2016-05-05
        • 1970-01-01
        • 2019-05-14
        相关资源
        最近更新 更多