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

Python中__class__未继承问题:子类调用方法为何输出父类类对象?

问题分析与解决

你的代码问题出在whoami方法的定义上——它既不是实例方法也不是类方法,导致调用时无法正确识别调用它的类。

错误原因

你定义的whoami是一个普通函数,直接放在类的命名空间里。当通过My.whoami()或My2.whoami()调用时,函数内部的__class__指向的是函数定义所在的My类,和调用它的子类My2没有关联,所以两次输出都是My类。

修正方案

方案1:使用类方法(推荐,直接通过类调用)

用@classmethod装饰器把方法标记为类方法,此时方法的第一个参数cls会自动绑定到调用该方法的类:

class My(object):
    @classmethod
    def whoami(cls):
        print(cls)

class My2(My):
    pass

My.whoami()
My2.whoami()

执行后输出:

<class '__main__.My'>
<class '__main__.My2'>

方案2:使用实例方法(通过实例调用)

给方法添加self参数,将其定义为实例方法,通过实例调用时,self.__class__会指向实例所属的类:

class My(object):
    def whoami(self):
        print(self.__class__)

class My2(My):
    pass

My().whoami()
My2().whoami()

执行后同样能得到你期望的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:02:05