You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何functools.partial函数设为类属性时不会成为绑定方法?

问题原因解析

普通函数的绑定逻辑

Python的普通函数实现了描述符协议中的__get__方法。当你通过类的实例(比如代码里的a.f)访问作为类属性的普通函数时,__get__方法会被触发,将函数包装成绑定方法——自动把当前实例作为第一个参数(也就是我们常说的self)传递给函数。所以a.f()实际等价于func1(a),但func1定义时不需要参数,因此抛出TypeError。

partial对象的特殊性

functools.partial创建的是partial类的实例,它并没有实现描述符协议的__get__方法。当你通过实例a访问g属性时,Python不会进行绑定处理,直接返回这个partial对象本身。调用a.g()时,只会执行partial对象包装的原始逻辑——直接调用func1(),不需要额外参数,因此正常打印"foo"。

一句话总结

普通函数是描述符,实例访问时会自动绑定self;而partial对象不是描述符,实例访问时直接返回自身,调用时不会自动传入实例作为参数。

内容的提问来源于stack exchange,提问作者fourleafclover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:50:24