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

如何向classmethod传入任意对象作为首个参数——绕过类参数自动注入

如何向classmethod传入自定义的cls参数?

当然可以实现,核心是利用classmethod作为描述符的特性,绕过它自动绑定当前类的逻辑,有两种直接的方式:

方法一:调用原始函数(__func__属性)

classmethod装饰后的方法会把原始函数存在__func__属性里,直接调用这个原始函数就能手动传入任意对象作为第一个参数,和普通方法的调用方式一致:

class Foo:
    @classmethod
    def cls_method(cls):
        print(f"当前使用的cls: {cls}")

# 手动传入object作为cls参数
Foo.cls_method.__func__(object())

方法二:通过描述符的__get__方法绑定自定义cls

classmethod是描述符类型,它的__get__方法可以接受instance和owner两个参数。当传入instance=None时,owner会被当作cls绑定到方法上,这样就能得到一个绑定了自定义cls的方法:

class Foo:
    @classmethod
    def cls_method(cls):
        print(f"当前使用的cls: {cls}")

# 绑定object作为cls,生成可调用的方法
custom_bound_method = Foo.cls_method.__get__(None, object)
custom_bound_method()

运行以上两种方式,都会输出当前使用的cls: <class 'object'>,达到手动指定cls的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:03:10