Оберните другой метод в определение класса - PullRequest
1 голос
/ 24 марта 2012

Я хочу создать метод (set), который вставляет аргументы в другой (set_result).Я пробовал это, используя partial, как показано ниже.

from functools import partial

class MyClass(MyClassParent):
    set = partial(MyClassParent.set_result, None)

Но это не работает.При вызове set в экземпляре MyClass я получаю эту ошибку:

TypeError: set_result() takes exactly 2 arguments (1 given)

Я предполагаю, что это означает, что неявное self не передано.Если я напишу set так, это сработает:

def __init__(self, *args, **kwds):
    super().__init__(*args, **kwds)
    self.set = partial(self.set_result, None)

Как мне обернуть set_result, используя прежний метод?

Ответы [ 3 ]

0 голосов
/ 25 марта 2012
class MyClass(MyClassParent):
    set = partial(MyClassParent.set_result, MyClassParent, None)
0 голосов
/ 26 марта 2012

Причина, по которой это не работает, заключается в том, что functools.partial не является дескриптором. Доступ к нему в экземпляре не вернет связанный метод.

Для этого на трекере есть ошибка Python , на которую я отправил патч .

0 голосов
/ 24 марта 2012
set = staticmethod(partial(MyClassParent.set_result, None))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...