我想修补一些使用来自外部模块的对象的代码。
这个对象的一个方法被到处调用,我需要在所有这些调用中设置一个新的默认 kwarg。
与其添加这么多重复的代码,我认为更改对象方法会更好。最干净的方法是什么?
最佳答案
这称为 monkey-patching并且没有“干净”的版本。
如果需要更换方法bar
在一个类(class)Foo
,使用此代码:
oldMethod = Foo.bar
def newMethod(self, **kwargs):
... fix kwargs as necessary ...
oldMethod(self, **kwargs)
Foo.bar = newMethod
self
,就好像这个函数在一个类中一样。 oldMethod(self, ...)
.这将获取方法指针,并以实例作为第一个参数调用它。 self.oldMethod()
不起作用,因为我们不在 class
中上下文(我认为)。 有关的:
关于python - 修补 python 对象以将默认值添加到方法 kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27784095/