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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:24:30