在 Python方法重写 的世界中,我们能够灵活地定制子类的行为,这是 面向对象编程 的核心特性之一。本教程将从零开始,用通俗易懂的语言和清晰的示例,带你掌握方法重写的原理与应用。

方法重写(Method Overriding)是指在子类中重新定义父类中已有的方法,使得子类对象在调用该方法时,执行的是子类中的新实现,而不是继承自父类的原始版本。这是实现 继承与多态 的关键机制。
简单来说:子类“覆盖”了父类的方法,但保留了方法名,从而可以根据对象的实际类型动态调用对应的方法。
在Python中,只需在子类中定义一个与父类同名的方法即可完成重写。来看一个基础示例:
class Animal: def speak(self): print("这个动物发出声音")class Dog(Animal): def speak(self): # 重写父类的 speak 方法 print("汪汪!")class Cat(Animal): def speak(self): # 重写父类的 speak 方法 print("喵喵~")# 测试animal = Animal()dog = Dog()cat = Cat()animal.speak() # 输出: 这个动物发出声音dog.speak() # 输出: 汪汪!cat.speak() # 输出: 喵喵~如上所示,Dog 和 Cat 类都重写了 speak 方法,实现了各自特有的行为。这正是 Python类方法 重写的典型应用场景。
有时我们希望在重写方法的同时,保留父类的部分功能。这时可以使用 super() 函数来调用父类的原始方法。
class Vehicle: def start(self): print("车辆启动中...")class Car(Vehicle): def start(self): super().start() # 先调用父类的 start 方法 print("汽车引擎轰鸣!")my_car = Car()my_car.start()# 输出:# 车辆启动中...# 汽车引擎轰鸣!super() 不仅让代码更清晰,还能避免硬编码父类名称,提高可维护性。
__private)会被名称修饰,通常不建议重写。ClassName.__mro__ 查看。下面通过一个完整例子,展示如何利用方法重写实现多态:
class Shape: def area(self): raise NotImplementedError("子类必须实现 area 方法")class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.heightclass Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14159 * self.radius ** 2# 多态使用shapes = [Rectangle(4, 5), Circle(3)]for shape in shapes: print(f"面积: {shape.area():.2f}")# 输出:# 面积: 20.00# 面积: 28.27这里,Shape 是一个抽象基类(虽然未使用 abc 模块),强制子类实现 area 方法。通过方法重写,每个图形都能计算自己的面积,而调用者无需关心具体类型——这就是 继承与多态 的魅力!
方法重写是 Python方法重写、面向对象编程、继承与多态 和 Python类方法 四大概念交汇的核心技术。掌握它,你就能写出更灵活、可扩展的代码。
记住:重写不是为了替换,而是为了定制;不是破坏继承,而是增强多态。从今天开始,在你的项目中大胆使用方法重写吧!
本文由主机测评网于2025-12-09发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125201.html