Python中同名不同参数的方法是否属于方法重写?
Python方法重写的参数规则解惑
首先明确:谷歌上的说法不完全准确。Python语法层面并不强制要求基类和派生类的重写方法参数完全一致,但从面向对象设计的角度,这种参数不一致的“同名方法覆盖”并不属于规范的方法重写。
针对你的代码分析
class A: def add(self,a,b): return a+b class B(A): def add(self,a,b,c): return a+b+c
这段代码在Python里是合法的,B类的add方法会直接覆盖A类的同名方法,但存在核心问题:
- 如果你用基类类型的引用指向派生类实例(比如
obj: A = B()),调用obj.add(1,2)会直接抛出参数数量不匹配的错误,这违反了里氏替换原则——派生类应该能无缝替换基类的使用场景。 - 严格来说,这种参数不同的同名方法不能被称为“方法重写”,它只是Python里的同名方法覆盖行为。Python本身不支持传统静态语言里的方法重载(靠参数区分同名方法),后定义的同名方法会直接覆盖之前的。
规范的重写方式
如果想扩展基类方法的参数,同时保持重写的兼容性,应该使用默认参数:
class B(A): def add(self,a,b,c=0): return a+b+c
这样既实现了功能扩展,又兼容基类的调用方式,这才是符合面向对象设计原则的方法重写。
内容的提问来源于stack exchange,提问作者user19734356
相关产品推荐
相关产品推荐

