MyClass
定义于module.py
。我们没有办法修改它。但我们确实知道类定义如下所示:
class MyClass:
def method(self, msg):
print 'from method:', msg
我首先导入模块,然后声明对象的实例:
import module
foo = module.MyClass()
然后我编写自己的函数:
def function(msg):
print 'from function:', msg
现在,每一次foo.method('')
我想打电话function()
所以它也打印相同的消息。
这种情况是否可以称为monkey patching
?如何实现所需要的?
是的,这就是所谓的猴子补丁。
这基本上是装饰,但在类定义后手动完成。
from functools import wraps
def wrapper(f):
@wraps(f)
def wrapped(*args, **kwargs):
myFunction()
return f(*args, **kwargs)
return wrapped
MyClass.printThis = wrapper(MyClass.printThis)
它将影响所有实例MyClass
,甚至是在应用补丁之前创建的那些。
如果您不需要动态修改运行时行为,请避免猴子修补 and 更喜欢使用继承按照评论中的建议自定义行为。它不那么老套。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)