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

Python子类设置默认值的OOP疑问:为何重写方法后调用super?

子类重写方法后调用父类方法的原因解析

先看完整代码:

class Vehicle:
    def __init__(self, name, max_speed, mileage):
        self.name = name
        self.max_speed = max_speed
        self.mileage = mileage

    def seating_capacity(self, capacity):
        return f"The seating capacity of a {self.name} is {capacity} passengers"

class Bus(Vehicle):
    # 给capacity设置默认值
    def seating_capacity(self, capacity=50):
        return super().seating_capacity(capacity=50)

School_bus = Bus("School Volvo", 180, 12)
print(School_bus.seating_capacity())

疑问点

我无法理解这段代码:def seating_capacity(self, capacity=50): ...
为什么要在子类中重新定义这个方法,之后再通过super()调用父类的同名方法?


解答

这么做的核心目的是给父类方法的参数添加默认值,同时复用父类已写好的逻辑,具体拆解:

  • 父类Vehicle的seating_capacity方法必须传入capacity参数,调用时不传会直接报错;
  • 但对于Bus这类特定车型,我们希望它有一个默认载客量(比如代码里的50人),调用时不用手动传参;
  • 子类重写方法时给capacity设置默认值50,再通过super()调用父类的同名方法,把参数传过去让父类处理字符串拼接的逻辑——这样既不用重复写父类里的字符串生成代码,又给子类新增了「默认参数」的特性。

另外补充个小优化:代码里super().seating_capacity(capacity=50)可以简化成super().seating_capacity(capacity),因为子类方法的参数已经默认是50了,直接传变量过去效果完全一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:39:57