子类调用父类方法的两种方式:哪种更常用且合适?
Python子类调用父类方法:
super() vs 直接调用父类 普及度
super().my_method(args)是Python社区更主流、更常用的写法,尤其是Python 3.x推出简化的super()语法后,几乎所有官方文档、主流开源项目(比如Django类视图、SQLAlchemy模型)都优先采用这种方式,PEP8编码规范也明确推荐用super()调用父类方法。
清晰度与适用性
直接调用父类的优势
ParentClass.my_method(self, args)确实更直观:一眼就能明确看到调用的是哪个父类的方法,self参数也显式传递,对于刚接触Python继承的开发者来说,不会对“参数去哪了”产生疑惑,理解成本更低。比如重写__init__时,这种写法能清晰展示父类初始化逻辑的调用过程。
super()的核心优势
- 可维护性更强:如果后续需要修改子类的继承关系(比如把父类从
ParentClass换成其他类),用super()的代码不需要修改这行调用,而直接调用父类的写法要逐一替换所有ParentClass的引用。 - 适配多继承场景:哪怕当前是单继承,未来扩展为多继承时,
super()会自动遵循Python的MRO(方法解析顺序)调用父类方法,避免手动调用可能导致的重复执行、顺序错误等问题,这是直接调用父类无法做到的。 - 符合Python语法设计:熟悉Python方法绑定逻辑的开发者都清楚,
super()调用时会自动把当前实例(self)传递给父类方法,这是语言层面的语法糖,习惯后并不会产生混淆,反而能减少重复代码。
代码示例(以__init__为例)
使用super()的写法
class ParentClass: def __init__(self, name): self.name = name class ChildClass(ParentClass): def __init__(self, name, age): super().__init__(name) self.age = age
直接调用父类的写法
class ParentClass: def __init__(self, name): self.name = name class ChildClass(ParentClass): def __init__(self, name, age): ParentClass.__init__(self, name) self.age = age
总结
如果是个人小项目、或者为了让新手快速理解继承逻辑,直接调用父类的写法完全可行;但从长期维护、团队协作、遵循社区规范的角度,优先推荐使用super()——它不仅是Python社区的通用惯例,还能为未来的代码扩展(比如多继承、父类变更)埋下伏笔。
内容的提问来源于stack exchange,提问作者H D
相关产品推荐
相关产品推荐

