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
相关产品推荐
相关产品推荐

