Python super()函数详解:语法、参数与多继承实战

认真发呆
认真发呆
发布时间:2026-10-13| 6人浏览过
原创

本文深入解析Python内置函数super()的使用方法。详细阐述其在单继承与多继承场景下的区别,介绍super(type, object-or-type)的语法结构及参数含义。通过两个具体代码案例,演示如何利用super()解决子类属性缺失问题,并优化代码的可移植性与重用性,帮助开发者掌握面向对象编程中的关键技巧。

一、super函数简介

Python内置的super()函数主要应用于类的多继承场景,用于定位并调用父类的方法。虽然在单重继承中不使用super()也能正常运行,但遵循使用super()是一种良好的编程习惯。通常,当子类需要调用父类的方法时,就会使用这种方式。

二、super函数语法

super(type, object-or-type)

参数说明如下:

type — 指定类,通常传入类名;

object-or-type — 指定实例或类,通常传入self;

返回值: 无

三、super函数使用

1.案例一:


# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com
@File:python_super.py
@Time:2019/12/29 21:25
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
 
class A:
  def m(self):
    print('A')
 
class B:
  def m(self):
    print('B')
 
class C(A):
  def m(self):
    print('C')
    super().m()
 
C().m()

输出结果:

C

A

代码分析:

这种做法的优势在于:若需更改子类继承的父类(例如从A改为B),只需修改一行代码(将class C(A):改为class C(B))即可,无需在class C的大量代码中逐一查找并修改基类名。此外,这也提高了代码的可移植性和重用性。

2.案例二:


# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com
@File:python_super.py
@Time:2019/12/29 21:25
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
 
class Dog:
  def __init__(self):
     self.fly = False
  def print_fly(self):
     if self.fly:
        print('不是普通狗,能飞')
     else:
        print('普用狗不会飞')
 
class xiaotianquan(Dog):
   def __init__(self):
     self.sound = True
 
   def print_sing(self):
     if self.sound:
       print("汪汪汪")
     else:
       print("假狗狗")
 
if __name__ == '__main__':
  dog = xiaotianquan()
  dog.print_sing() # 能正常输出
  dog.print_fly() # 报错,AttributeError: 'xiaotianquan' object has no attribute 'fly'

代码分析:

尽管子类xiaotianquan继承了父类Dog,但子类直接调用父类的print_fly函数仍会报错,原因是子类实例没有父类的fly属性。上述代码可以通过在__init__函数中调用super()来解决,例如:


class Dog:
  def __init__(self):
     self.fly = False
  def print_fly(self):
     if self.fly:
        print('不是普通狗,能飞')
     else:
        print('普用狗不会飞')
 
class xiaotianquan(Dog):
   def __init__(self): 
     super().__init__() # 等效 super(xiaotianquan,self).__init__()
     self.fly = True
     self.sound = True
 
 
   def print_sing(self):
     if self.sound:
       print("汪汪汪")
     else:
       print("假狗狗")
 
if __name__ == '__main__':
  dog = xiaotianquan()
  dog.print_sing() 
  dog.print_fly()

输出结果:

汪汪汪

不是普通狗,能飞

相关标签:

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

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 算法库。