可以像这样扩展Python模块吗?

时间:2014-07-20 03:43:12

标签: python python-2.7 inheritance composition python-module

我有一个基础Python模块basemodule.py,包含许多函数和类。现在我想创建许多新模块new1.pynew2.pynew3.py等。

这些模块中的每一个都只会在基本模块中添加或更改1-2个功能。我正在寻找扩展基本模块的方法,因此我不需要重复许多代码。

参考this post,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 个答案:

答案 0 :(得分:1)

虽然可能不那么常见,但这肯定是Python中code reuse的有效方法,并且有其用途,例如:用模拟的模块替换实模块来测试或滚动插件系统。

它是模块级别object composition的一种形式,可能比通常object inheritance更灵活,请参阅composition over inheritance。虽然您应该注意不要以一些模糊的方式使用这种方法来降低代码清晰度。我说这通常是在课堂上完成的。