You need to enable JavaScript to run this app. Python中super调用如何避免硬编码当前类名,适配类重命名符合DRY原则?
优惠活动
大模型
产品
解决方案
定价
更多

Python中super调用如何避免硬编码当前类名,适配类重命名符合DRY原则?

实现方案

Python 3.6及以上版本支持在类的方法内部直接使用__class__隐式变量,该变量固定指向方法定义时所属的类,刚好可以替代硬编码的类名:

class Foo(Bar):
    def __init__(self, *args, **kwargs):
        super(__class__, self).__init__(*args, **kwargs)

方案优势

  • 完全满足你显式指定super搜索起点的要求,两个参数都显式传入,没有省略
  • 后续重命名Foo类时无需修改这行代码,符合DRY编码原则
  • 效果和硬编码Foo完全一致:__class__和方法定义的类绑定,就算其他子类继承该方法,super的搜索起点仍然是原类,不会受子类实例影响,适配你的类会被继承的使用场景。

注意不要误用self.__class__替代:self.__class__指向实例的实际所属类,当子类继承该方法时,super的搜索起点会变成子类,会导致MRO搜索逻辑异常,不符合你固定搜索起点的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 19:54:07