在 python 面向对象编程中,可通过在子类重写方法时为参数指定默认值,实现灵活的接口扩展;关键在于正确调用父类方法并传递实际参数,而非硬编码默认值。
当设计具有通用行为但需差异化默认配置的类层次结构时(例如不同车型有不同默认座位数),直接在子类方法签名中设置默认参数是最清晰、最符合 Python 惯例的做法。以 Vehicle 和 Bus 为例:
✅ 正确写法(推荐):
class Bus(Vehicle):
def seating_capacity(self, capacity=50):
return super().seating_capacity(capacity) # 动态传递 capacity(可能是 50 或调用时传入的值)❌ 错误写法(常见误区):
def seating_capacity(self, capacity=50):
return super().seating_capacity(capacity=50) # 始终固定传 50,忽略调用方传入的实际值!这样会

? 核心原则:
子类方法中的默认值仅用于调用方未提供参数时的兜底,而 super() 调用必须如实转发运行时确定的 capacity 值(无论是默认值还是显式传入值),才能兼顾兼容性与可扩展性。
总结:设置默认值 ≠ 硬编码值;重写方法的本质是增强接口,而非覆盖逻辑——让父类专注“做什么”,子类专注“怎么做更便捷”。