Python 继承、重写与 super() 调用父类方法详解
本文通过具体代码示例,详细解析 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()关键点说明
- 继承与重写:子类
XiaoTianQuan继承自Dog,并重写了bark方法。这意味着当调用xtq.bark()时,执行的是子类中定义的逻辑。 - 调用父类方法:在重写的
bark方法中,通过super().bark()调用了父类Dog的原始bark方法。这是推荐的方式,因为它不依赖于具体的父类名称,便于代码维护。 - 另一种调用方式:代码中还展示了通过
Dog.bark(self)调用父类方法的方式。这种方式在 Python 2.x 中较为常见,但不推荐在现代 Python 代码中使用,因为如果父类名称更改,此处也需要手动修改,增加了维护成本。 - 避免递归死循环:注释中特别指出,如果在子类方法内部直接调用
XiaoTianQuan.bark(self),会导致无限递归调用,最终引发栈溢出错误。因此,必须使用super()或显式指定父类名来调用父类方法。
运行结果
执行上述代码后,控制台将输出以下三行内容:
- 第一行输出:
汪汪叫(来自super().bark()) - 第二行输出:
汪汪叫(来自Dog.bark(self)) - 第三行输出:
神一样的叫唤...(来自子类扩展逻辑)
通过本示例,我们可以看到 super() 在调用父类方法时的便捷性和安全性,以及正确理解继承与重写机制的重要性。

以上就是 Python 继承、重写与 super() 调用父类方法操作示例的详细内容,更多关于 Python 面向对象编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













