Обезьяна исправляет метод экземпляра Python, используя оригинальный метод из класса
Я хочу, чтобы обезьяна исправила метод библиотечного класса, чтобы определить другое значение по умолчанию для параметра. Это не удается:
from functools import partial
class A(object):
def meth(self, foo=1):
print(foo)
A.meth = partial(A.meth, foo=2)
a = A()
a.meth()
с:
Traceback (most recent call last):
File "...", line 10, in <module>
a.meth()
TypeError: meth() missing 1 required positional argument: 'self'
Как правильно это сделать?
(Оригинальный код использует getattr
на имена методов в цикле)
Ответы в связанном вопросе включают определение новой функции уровня модуля - я бы хотел избежать определения новой функции
1 ответ
Решение
Использование partialmethod
:
In [32]: from functools import partialmethod
In [33]: A.meth = partialmethod(A.meth, foo=2)
In [34]: a = A()
In [35]: a.meth()
2