Как использовать functools.partial для метода класса? - PullRequest
1 голос
/ 19 марта 2020

Я хотел бы применить частичное из functools к методу класса.

from functools import partial

class A:
    def __init__(self, i):
        self.i = i

    def process(self, constant):
        self.result = self.i * constant

CONST = 2
FUNC = partial(A.process, CONST)

Когда я пытаюсь:

FUNC(A(4))

Я получил эту ошибку:

'int' object has no attribute 'i'

Кажется, что CONST был обменен с объектом A.

1 Ответ

3 голосов
/ 19 марта 2020

Вы связываете один позиционный аргумент с partial, который будет go с первым аргументом process, self. Когда вы затем вызываете его, вы передаете A(4) в качестве второго позиционного аргумента, constant. Другими словами, порядок аргументов нарушен. Вам необходимо привязать CONST к constant явно:

FUNC = partial(A.process, constant=CONST)

В качестве альтернативы это может сделать то же самое:

FUNC = lambda self: A.process(self, CONST)
...