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

Python继承:如何从基类调用实例所属类的类方法?

问题解决思路

你遇到的场景其实很典型:想把重复的__init__和类方法cm都放到基类A里,让所有子类自动继承,同时保证实例化子类时,能调用对应子类的cm方法,不用在每个子类里重复写代码。

其实你忽略了Python里一个很实用的小知识点——通过实例的__class__属性动态获取它所属的类,直接看解决方案:

完整实现代码

class A:
    cls_x = 'A'
    
    @classmethod
    def cm(cls):
        return cls.cls_x
    
    def __init__(self):
        # 核心:用self.__class__获取当前实例所属的类,再调用它的cm方法
        self.attr = self.__class__.cm()

class B(A):
    cls_x = 'B'

class B1(A):
    cls_x = 'B1'

为什么这样可行?

  • 当你实例化B时,self是B的实例,self.__class__就等于B这个类,所以self.__class__.cm()等价于B.cm()
  • 类方法cm的cls参数会自动绑定调用它的类,调用B.cm()时,cls就是B,返回的自然是B的cls_x属性
  • 所有子类只需要定义自己的cls_x,完全不用管__init__和cm,完美实现代码复用

验证效果

运行下面的测试代码:

a = A()
print(a.attr)  # 输出 'A'

b = B()
print(b.attr)  # 输出 'B'

b1 = B1()
print(b1.attr)  # 输出 'B1'

另外,你也可以用type(self)代替self.__class__,两者在绝大多数场景下效果完全一致,选你习惯的写法就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:47:54