如何将Python模块拆分成多个文件?

17 投票
3 回答
14949 浏览
提问于 2025-04-17 04:30

我有一个Python模块,里面有三个类:A、A1和A2。A1和A2是从A这个类派生出来的。A类里面有一些函数,可以对A1和A2进行操作。

当这些内容都放在一个.py文件里时,一切都运行得很好。但是这个文件变得有点长了,我想把A1和A2分到各自的文件里去。请问我该怎么做才能在有循环依赖的情况下分开这些文件呢?

3 个回答

0

我觉得你问题的核心是你不想要

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

不过,在Python中这样做是完全可以的。但是,要确保在一个有多个模块的系统中,你的代码不要放在函数或类之外,因为这些代码的运行顺序会根据你在哪里导入它、导入了什么、甚至是月亮的相位等因素而变化。

2

我该如何处理这个文件,尽管它有循环依赖的问题?

选项1:打破循环依赖。把基础类放在一个单独的模块里,把派生类放在其他模块中,再把操作这些派生类的函数放在另一个模块里。


选项2:忽略循环依赖,只把模块或包导入到全局命名空间中,也就是说:

foo.py

class Bar:
    "Frobs Quuxen"

不要使用 from foo import Bar 这种方式导入,而是用 import foo,在需要的地方用 foo.Bar 来引用。

12

modA.py:

class A(...):
   ...

modA1.py:

import modA
class A1(modA.A):
   ...

modA2.py:

import modA
class A2(modA.A):
   ...

modfull:

from modA import A
from modA1 import A1
from modA2 import A2

即使A处理A1和A2,你也没问题,因为得益于鸭子类型,你不需要导入实际的名称。

撰写回答