我使用的是别人编写的模块。我想修补模块中定义的类的 __init__
方法。我找到的示例都假定我要自己调用这个类(例如 猴子补丁 Python 类)。然而,事实并非如此。在我的例子中,类是在另一个模块的函数中初始化的。参见下面的(大大简化的)例子:
Third partymodule _ a. py
class SomeClass(object):
def __init__(self):
self.a = 42
def show(self):
print self.a
Third partymodule _ b. py
import thirdpartymodule_a
def dosomething():
sc = thirdpartymodule_a.SomeClass()
sc.show()
Mymodule.py
import thirdpartymodule_b
thirdpartymodule_b.dosomething()
有没有办法修改 SomeClass
的 __init__
方法,例如,当从 mymodule.py 调用 dosomething
时,它打印43而不是42?理想情况下,我能够包装现有的方法。
我不能更改第三方模块 * 。Py 文件,因为其他脚本依赖于现有的功能。我宁愿不必创建我自己的模块副本,因为我需要做的更改非常简单。
编辑2013-10-24
在上面的例子中,我忽略了一个很小但很重要的细节。
为了完成 F.J 建议的修补程序,我需要替换 thirdpartymodule_b
中的拷贝,而不是 thirdpartymodule_a
。