Python 中的方法重写

2025年6月28日 | 阅读 7 分钟

在 Python 中,方法重写(Method Overriding)是指子类中定义了一个与父类中同名的方法。当父类和子类中存在同名、参数、语法和返回类型(或子类型)都相同的方法时,子类中的方法就会“覆盖”父类中的方法。

Method Overriding in Python

调用某个方法时,对象的实际类型将决定执行哪个版本的方法。当通过父类对象的引用调用方法时,将执行父类版本的方法;但是,当通过子类对象的引用调用方法时,将执行子类版本的方法。

换句话说,被重写方法的执行版本取决于实际引用的对象,而不是引用变量的类型。重写父类方法的一个原因是,你可能希望在子类中实现特殊的或不同的功能。

让我们通过一个示例来了解 Python 中方法重写是如何工作的。

示例

立即执行

输出

Inside Parent Class
Inside Child Class

说明

在这个示例中,我们有两个类 - Parent 和 Child。在 Parent 类中,display() 方法用于打印一条消息。在 Child 类中,display() 方法被重写,用于打印与 Child 类相关联的消息。

然后,我们创建了这两个类的对象并调用了它们的方法。结果是,Child 类的方法被重写了。

多级继承和多重继承中的方法重写

我们现在将理解多级继承和多重继承中的方法重写。

1) 多重继承

当一个类派生自多个基类时,我们就称之为多重继承。

让我们看一个示例,其中我们将仅通过一个父类来重写一个方法。

示例

立即执行

输出

Inside Child Class
Inside Second Parent Class

说明

在上面的示例中,我们有多个类 - First_Parent、Second_Parent 和 Child。我们在 First_Parent 和 Second_Parent 类中定义了一些方法。我们对 Child 类使用了多重继承,并重写了 show() 方法。最后,我们创建了 Child 类的对象并调用了 show() 和 display() 方法。

结果是,show() 方法被成功重写,而 Second_Parent 类的 display() 方法被返回。

2) 多级继承

如果存在子类和孙类之间的关系,那么该类就被称为多级继承。

让我们看下面的示例,其中我们希望重写其父类的方法。

示例

立即执行

输出

Inside GrandChild Class
Inside Parent Class

说明

在这个示例中,我们有多个类 - Parent、Child 和 GrandChild,它们遵循多级继承。在这里,Parent 类的成员方法和属性被 Child 类继承,而 Child 类的成员方法和属性被 GrandChild 类继承。

结果是,当我们重写 show() 方法并创建 GrandChild 类的对象时,会显示来自 GrandChild 类的消息。

在重写的方法中调用父类的方法

重写的方法也可以调用父类的方法。通常有两种方法可以实现这一点。

1) 使用类名

在重写的方法内部,我们可以使用父类的“类名.方法”来调用父类中的方法。

下面是一个示例,演示了在重写的方法中使用类名调用父类方法的用法。

示例

立即执行

输出

Inside Parent Class
Inside Child Class

说明

在上面的代码片段中,我们有两个类 - Parent 和 Child,其中 Child 类继承了 Parent 类的成员方法和属性。在 Child 类中,我们使用父类的类名调用了父类的 show() 方法,然后重写了该方法以打印不同的消息。

结果是,我们成功地从重写的方法中调用了父类的 show() 方法。

2) 使用 super()

在 Python 中,super() 函数允许我们显式地引用父类。当我们想要调用超类函数时,它非常方便。它返回一个代理对象,允许我们通过“super”来引用父类。

让我们看一个示例来理解 super() 在 Python 多重继承中的用法。

示例

立即执行

输出

Hello, I am the GrandChild Class
Hello, I am the Child Class
Hello, I am the Parent class.
The value initialized in GrandChild: 25
The value initialized in Child: 26
The value initialized in Parent: 27

说明

在此示例中,我们演示了多级继承层次结构中的方法重写以及使用 super() 调用父类方法。GrandChild 重写了 display_value() 并使用 super() 调用 Child 的版本,而 Child 的版本又调用 Parent 的方法。它还展示了如何使用 super() 来链接构造函数(__init__),以保持初始化顺序。

注意事项

  • 在子类中要重写的方法的名称必须与父类中的名称相同。
  • 它不能在类中独立发生,而是需要一个从父类派生的子类。因此,它被认为是继承概念的一部分。
  • 在子类中调用的方法的参数数量应与父类中的参数数量相同。

结论

方法重写是任何编程语言中的重要概念。它使代码更强大且可重用。方法重写允许开发人员在子类中提供父类中已声明方法的特定实现。在本教程中,我们涵盖了各种示例来说明多重继承的概念。理解和应用这一概念不仅有助于创建高效的代码,还能让你脱颖而出,成为一名熟练的程序员。

Python 方法重写常见问题解答

1) 什么是 Python 中的方法重写?

方法重写是面向对象编程中的一个特性,其中子类提供了父类中已定义方法的特定实现。

2) 为什么要使用方法重写?

它允许子类自定义或扩展父类方法的行为,而无需修改父类本身。

3) 在多重继承中可以使用方法重写吗?

是的。Python 使用方法解析顺序 (MRO) 来确定要调用哪个方法。

4) 如果在子类中不重写方法会怎样?

如果没有重写方法,当在子类对象上调用时,将使用从父类继承的方法。

5) 构造函数(__init__)可以被重写吗?

是的,你可以在子类中重写 __init__() 方法。如果需要,请使用 super().__init__() 来调用父类的构造函数。


下一主题PyGTK GUI 编程