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
相关产品推荐
相关产品推荐

