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

Python子类存在同名不同参方法时如何调用父类对应方法?

原理说明

Python属于动态类型语言,方法重写不会强制要求和父类方法签名(参数、返回值类型)一致,只要子类定义了和父类同名的方法,就会直接覆盖父类的实现,MRO查找时会优先返回子类的方法,这就是你调用super_human.print_name("Kent")报错的原因:子类的print_name只接受self一个参数,你额外传了"Kent"自然不符合参数要求。

调用父类同名方法的实现方式

完全可以调用到被覆盖的父类同名方法,常用有两种场景的实现方式:

1. 在子类内部调用父类方法

用super()函数即可直接指代父类实例,调用对应方法即可,示例如下:

class Superhero(Person):
    def __init__(self, name, age, power):
        super().__init__(name, age)
        self.power = power

    def print_name(self, last_name=None):
        # 如果传了last_name就调用父类的打印逻辑
        if last_name:
            super().print_name(last_name)
        # 否则走子类自己的逻辑
        else:
            print(self.name)

修改后下面的调用都可以正常运行:

super_human.print_name() # 输出 Superman
super_human.print_name("Kent") # 输出 Superman Kent

2. 在类外部直接调用父类被覆盖的方法

如果不想修改子类代码,又需要调用父类的同名方法,可以显式指定父类名调用,把实例作为self参数手动传入即可:

# 直接调用Person类的print_name方法,把super_human作为self传入
Person.print_name(super_human, "Kent")

运行后会直接输出Superman Kent,不会触发子类的方法逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:45:03