Python3 partialmethod生成函数无法调用问题求助
解决
partialmethod对象不可调用的问题 这个问题的核心是你搞混了partial和partialmethod的适用场景——这俩虽然长得像,但设计目标完全不一样!
为什么会报错?
partialmethod是专门为类定义阶段设计的工具,用来创建预先绑定部分参数的类方法。它本身并不是一个可直接调用的函数对象,而是一个描述符,只有当它作为类属性被实例访问时,才会生成绑定了实例的可调用方法。
你现在在实例方法fun()里返回partialmethod对象,拿到的只是这个描述符本身,而不是绑定好的可调用函数,所以调用b()时会触发TypeError。
解决方案1:用partial替代partialmethod(适合你的场景)
如果你想在实例层面生成一个绑定了参数的可调用函数,应该使用functools.partial。同时注意修正你代码里__init__方法的小错误(原来的__init__没有接收val参数):
from functools import partial class AClass(): def __init__(self, val): self.v = val def _fun(self, x): z = x + self.v # some computation return z def fun(self, x): # 用partial创建绑定了self和x的可调用对象 return partial(self._fun, x) a = AClass(10) b = a.fun(1) print(b()) # 输出 11
解决方案2:正确使用partialmethod(类定义场景)
如果你确实需要用partialmethod,它的正确用法是在类定义时直接定义预设参数的方法,比如给类添加一个固定传入某个参数的方法:
from functools import partialmethod class AClass(): def __init__(self, val): self.v = val def _fun(self, x): z = x + self.v return z # 在类定义时,用partialmethod创建一个固定x=1的方法fun1 fun1 = partialmethod(_fun, 1) a = AClass(10) print(a.fun1()) # 输出 11
一句话总结
partial:用于创建绑定了部分参数的可调用对象,适用于实例或任意函数场景partialmethod:仅用于类定义中,生成预先绑定参数的类方法,是类层面的工具
内容的提问来源于stack exchange,提问作者M Wade
相关产品推荐
相关产品推荐

