猴子修补具有层次继承的实例的方法
Monkey-patching a method of an instance with hierarchical inheritance
想象下面的例子:
class Parent():
def foo():
...
def Child(Parent):
def foo():
... # some stuff
super().foo()
... # some stuff
obj1 = Parent()
obj2 = Child()
patched_foo():
...
我试图在实例中从父 class 猴子修补 foo
方法 (而不是 classes ).我目前正在做以下事情:
import types
def monkey_patch(x):
if isinstance(x, Parent):
x.foo = types.MethodType(patched_foo, x)
这适用于 obj1,但不适用于 obj2,因为 Parent 的 foo 方法被覆盖了。有没有办法从 Parent 获取访问权限并修补 foo?也许以某种方式使用 super()
?
super()
正在从父 class 对象中检索方法,其中只有一个。您可以在 class 上修补该方法,但父 class 及其后代的所有实例都会感受到这种变化。您不能对单个实例进行修补。
想象下面的例子:
class Parent():
def foo():
...
def Child(Parent):
def foo():
... # some stuff
super().foo()
... # some stuff
obj1 = Parent()
obj2 = Child()
patched_foo():
...
我试图在实例中从父 class 猴子修补 foo
方法 (而不是 classes ).我目前正在做以下事情:
import types
def monkey_patch(x):
if isinstance(x, Parent):
x.foo = types.MethodType(patched_foo, x)
这适用于 obj1,但不适用于 obj2,因为 Parent 的 foo 方法被覆盖了。有没有办法从 Parent 获取访问权限并修补 foo?也许以某种方式使用 super()
?
super()
正在从父 class 对象中检索方法,其中只有一个。您可以在 class 上修补该方法,但父 class 及其后代的所有实例都会感受到这种变化。您不能对单个实例进行修补。