Python 继承、重写与 super() 调用父类方法详解

雨后青山
雨后青山
发布时间:2026-10-11| 2人浏览过
原创

本文通过具体代码示例,详细解析 Python 中类的继承、方法重写以及 super() 函数的使用。重点演示子类如何调用父类同名方法,对比两种调用方式的区别,并指出递归调用的潜在风险,帮助开发者掌握面向对象编程的核心技巧。

Python 继承、重写与 super() 调用父类方法详解

在 Python 面向对象编程中,继承允许子类获取父类的属性和方法,而重写(Override)则允许子类修改或扩展父类的行为。当需要在子类中调用父类被重写的方法时,super() 是一个关键工具。本文将通过一个具体的代码示例,演示如何实现继承、重写以及使用 super() 调用父类方法。

代码示例与解析

以下代码定义了一个父类 Dog 和一个继承自它的子类 XiaoTianQuan。子类不仅继承了父类的 bark 方法,还重写了该方法,并在其中调用了父类的原始实现。

# 父类
class Dog:
  def bark(self):
    print("汪汪叫")
# 子类 继承
class XiaoTianQuan(Dog):
  def fly(self):
    print("我会飞")
  # 可以重写父类中的同名方法
  def bark(self):
    # super().父类方法名 调用父类中的方法 (第一种方式)(推荐)
    super().bark()
    # 父类名.方法(self) 调用父类中的方法 (第二种方式,python2.x)(不推荐,父类名修改后,此处也得改)
    Dog.bark(self)
    # 注意:如果使用子类名调用方法,可能会出现递归调用 -- 死循环!
    # XiaoTianQuan.bark(self) # 会产生死循环
    # 针对子类特有的需求,进行扩展
    print("神一样的叫唤...")
xtq = XiaoTianQuan()
xtq.bark()

关键点说明

  1. 继承与重写:子类 XiaoTianQuan 继承自 Dog,并重写了 bark 方法。这意味着当调用 xtq.bark() 时,执行的是子类中定义的逻辑。
  2. 调用父类方法:在重写的 bark 方法中,通过 super().bark() 调用了父类 Dog 的原始 bark 方法。这是推荐的方式,因为它不依赖于具体的父类名称,便于代码维护。
  3. 另一种调用方式:代码中还展示了通过 Dog.bark(self) 调用父类方法的方式。这种方式在 Python 2.x 中较为常见,但不推荐在现代 Python 代码中使用,因为如果父类名称更改,此处也需要手动修改,增加了维护成本。
  4. 避免递归死循环:注释中特别指出,如果在子类方法内部直接调用 XiaoTianQuan.bark(self),会导致无限递归调用,最终引发栈溢出错误。因此,必须使用 super() 或显式指定父类名来调用父类方法。

运行结果

执行上述代码后,控制台将输出以下三行内容:

  • 第一行输出:汪汪叫(来自 super().bark())
  • 第二行输出:汪汪叫(来自 Dog.bark(self))
  • 第三行输出:神一样的叫唤...(来自子类扩展逻辑)

通过本示例,我们可以看到 super() 在调用父类方法时的便捷性和安全性,以及正确理解继承与重写机制的重要性。

以上就是 Python 继承、重写与 super() 调用父类方法操作示例的详细内容,更多关于 Python 面向对象编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。