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

Python父类静态/类方法中如何获取实际调用的子类类型

问题原因

__class__ 是Python在函数定义阶段就静态绑定的隐式变量,永远指向定义该方法的类,不会随继承关系、调用方的变化动态改变。把get_class抽到基类后,方法定义在BaseClass内部,所以无论哪个子类调用,返回的永远是BaseClass。

修改方案

将公共方法标记为类方法,使用类方法自动注入的cls参数返回当前调用类即可,既消除了重复代码,调用方式也和原代码完全一致:

class BaseClass():
    @classmethod
    def get_class(cls):
        return cls

class Dog(BaseClass):
    pass

class Cat(BaseClass):
    pass

print(Dog.get_class())
print(Cat.get_class())

运行输出和预期完全一致:

<class '__main__.Dog'>
<class '__main__.Cat'>

补充说明:类方法的cls参数是动态绑定的,哪个类发起调用,cls就指向哪个类,不受方法定义位置的影响,完全适配继承场景下的复用需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:45:40