#python #monkeypatching
#python #обезьянье исправление
Вопрос:
Представьте пример ниже:
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, где родительский метод foo перезаписан. Есть ли способ получить доступ и исправить foo от Parent? Возможно, каким-то образом используя super()
?
Ответ №1:
super()
извлекает метод из объекта родительского класса, которого существует только один. Вы можете исправить метод в этом классе, но изменение будет ощущаться всеми экземплярами родительского класса и его потомками. Вы не можете исправить отдельный экземпляр.
Комментарии:
1. Итак, в итоге я могу исправить прямые методы отдельного экземпляра, но не методы в его родителях.