首页 > 解决方案 > 如何将 functools.partial 用于类方法?

问题描述

我想将部分来自 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 交换。

标签: pythonclassobjectpartialfunctools

解决方案


您正在绑定一个位置参数,partial该参数将转到 , 的第一个process参数self。然后,当您调用它时,您将A(4)作为第二个位置参数传递constant. 换句话说,参数的顺序是混乱的。您需要明确绑定CONSTconstant

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

或者,这将做同样的事情:

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

推荐阅读