
在 python 面向对象编程中,可通过在子类重写方法时为参数指定默认值,实现灵活的接口扩展;关键在于正确调用父类方法并传递实际参数,而非硬编码默认值。
当设计具有通用行为但需差异化默认配置的类层次结构时(例如不同车型有不同默认座位数),直接在子类方法签名中设置默认参数是最清晰、最符合 Python 惯例的做法。以 Vehicle 和 Bus 为例:
- 父类 Vehicle.seating_capacity(capacity) 要求显式传参,保证基础逻辑的强制性与通用性;
- 子类 Bus.seating_capacity(capacity=50) 重写该方法,仅扩展接口——添加默认值 50,不改变原有逻辑,而是复用父类实现。
✅ 正确写法(推荐):
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,忽略调用方传入的实际值!这样会导致 School_bus.seating_capacity(42) 也输出 50 passengers,完全丧失参数灵活性。
立即学习“Python免费学习笔记(深入)”;
? 核心原则:
子类方法中的默认值仅用于调用方未提供参数时的兜底,而 super() 调用必须如实转发运行时确定的 capacity 值(无论是默认值还是显式传入值),才能兼顾兼容性与可扩展性。
总结:设置默认值 ≠ 硬编码值;重写方法的本质是增强接口,而非覆盖逻辑——让父类专注“做什么”,子类专注“怎么做更便捷”。











