Обезьяна исправляет метод экземпляра Python, используя оригинальный метод из класса - PullRequest
0 голосов
/ 31 января 2019

Я хочу, чтобы обезьяна исправила метод библиотечного класса, чтобы определить другое значение по умолчанию для параметра.Сбой:

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 Ответ

0 голосов
/ 31 января 2019

Использование 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
...