猴子修补具有层次继承的实例的方法

时间:2019-04-24 11:20:44

标签: python monkeypatching

想象下面的例子:

class Parent():
    def foo():
        ...

def Child(Parent):
    def foo():
        ... # some stuff
        super().foo()
        ... # some stuff

obj1 = Parent()
obj2 = Child()

patched_foo():
    ...

我正在尝试实例化父类(而非类)中的foo方法 。我目前正在执行以下操作:

import types

def monkey_patch(x):
    if isinstance(x, Parent):
        x.foo = types.MethodType(patched_foo, x)

这对于obj1可以正常工作,但不适用于obj2,因为parent的foo方法被覆盖了。有没有一种方法可以访问并从Parent修补foo?也许以某种方式使用super()

1 个答案:

答案 0 :(得分:1)

int(x)正在从父类对象中检索该方法,其中只有一个。您可以在该类上修补该方法,但是更改将由父类及其后代的所有实例感知到。您无法修补单个实例。