这样扩展Python模块可以吗?

0 投票
1 回答
1105 浏览
提问于 2025-04-18 14:00

我有一个基础的Python模块叫做 basemodule.py,里面有很多函数和类。现在我想创建一些新的模块,比如 new1.pynew2.pynew3.py 等等。

每个新模块只会添加或修改基础模块中的1到2个函数。我想找到一种方法来扩展基础模块,这样就不需要重复很多代码了。

参考了 这篇帖子,Rizwan 提出了一个很有趣的做法。

extmodule.py

from basemodule import *
import basemodule

#code is in extended module
def makeBalls(a,b):
    foo = makeBall(a)
    bar = makeBall(b)
    print foo,bar

#function from extended module overwrites base module
def override():
    print "OVERRIDE TWO"

#function from extended module calls base module first
def dontoverride():
    basemodule.dontoverride()
    print "THIS WAS PRESERVED"

在这个例子中,基础模块被导入了两次,分别使用了 import ..from .. import ..

这样扩展Python模块可以吗?会不会导致一些不确定的行为呢?

1 个回答

1

虽然这种方法可能不是很常见,但在Python中确实是一种有效的代码重用方式,并且有它的用处,比如在测试时用模拟模块替代真实模块,或者创建插件系统。

这是一种在模块层面上的对象组合,可能比通常的对象继承更灵活,具体可以参考组合优于继承。不过,你要小心不要因为用这种方式而让代码变得不清晰。我觉得这种做法通常是在类的层面上进行的。

撰写回答