Я пытаюсь monkeypatch метод на SomeClass
из импортированного пакета:
from somepackage import SomeClass
def newmethod(obj, node, **kwargs):
""" """
SomeClass.oldmethod = newmethod
Где obj
и node
находятся в сигнатуре по умолчанию SomeClass.oldmethod
:
class SomeClass(object):
def oldmethod(obj, node):
""" """
Я знаю, что monkeypatching не является хорошей практикой, но нам нужно обходное решение, в то время как мы исправляем некоторые проблемы, которые иначе не могут быть решены. Вышеупомянутый подход работает FINE, но мы хотели бы использовать частичные функции для этого. Например:
from functools import partial
newmethod_a = partial(newmethod, foo='a')
newmethod_b = partial(newmethod, foo='b')
Частичная функция вызывается, потому что нам нужно передать разные ** kwargs. Но когда я пытаюсь перегрузить сейчас:
SomeClass.oldmethod = newmethod_a
Я получаю сообщение об ошибке, связанном с количеством переданных аргументов, но это очень специфично для моей проблемы, поэтому вставка может быть не очень полезной... Ошибка, которая, как мне кажется, связана с сигнатурой вызова oldmethod
с двумя позиционными аргументами (obj, node
), и мои частичные функции не передают ссылку на obj
и node
правильно. Я пробовал разные конструкции, например:
newmethod_a = partial(SomeClass.newmethod, foo='a')
Мне жаль, что я не могу создать минимальный рабочий пример. Я надеялся, что, возможно, эксперт просто узнает эту проблему из опыта и скажет мне, возможно ли, что я пытаюсь, в рамках partial
.
Спасибо