Python工程师必知:super()__init__()用法

Python工程师必知:super()__init__()用法在Python面向对象编程中,我们经常需要调用父类的构造函数,而调用父类构造函数的一种常用方法是使用super()函数,其搭配的关键字是__init__()函数。

在Python面向对象编程中,我们经常需要调用父类的构造函数,而调用父类构造函数的一种常用方法是使用super()函数,其搭配的关键字是__init__()函数。

一、super()函数的概念

super()函数用于调用父类中的方法,可以避免在子类实现中重复写出父类的方法名,实现了代码复用与维护的便利。

当父类中出现同名函数的时候,使用super()可以保证调用了正确的函数。这是因为super()会按照方法解析顺序(MRO)的顺序来查找父类中的方法,而不是在当前类中查找。

MRO是一种线性化的方法解析顺序,它定义了子类中的方法搜索顺序,每个类都有一个MRO列表,按照从左至右,深度优先的顺序排列。

class A:
    def __init__(self):
        print('调用A类构造函数')
        
class B(A):
    def __init__(self):
        super().__init__()
        print('调用B类构造函数')
        
b = B()

运行结果:

调用A类构造函数
调用B类构造函数

上例中,子类B继承自父类A,并在构造函数中调用了父类A的构造函数。在调用super().__init__()时,会调用父类A的构造函数,输出“调用A类构造函数”的信息,然后再执行自身的构造函数,输出“调用B类构造函数”的信息。

二、super()函数使用时应注意的问题

1. super()函数的参数

super()函数有两种常见的调用形式,一种是super(当前类名, self);另一种是super(父类名, 子类实例)。

第一种调用形式中,当前类名可以省略,直接传入self,Python解释器会自动根据当前类确定要调用的父类。

class A:
    def foo(self):
        print('调用A类方法')

class B(A):
    def foo(self):
        super().foo()

b = B()
b.foo()

运行结果:

调用A类方法

上例中,子类B继承自父类A,重写了foo方法,并在foo方法中使用super().foo()调用了父类A的foo方法。

第二种调用形式中,可以手动指定要调用的父类名称,Python解释器会根据该名称按照类的继承关系来确定要调用的父类。

class A:
    def foo(self):
        print('调用A类方法')

class B(A):
    def foo(self):
        super(A, self).foo()

b = B()
b.foo()

运行结果:

调用A类方法

上例中,子类B继承自父类A,重写了foo方法,并在foo方法中使用super(A, self).foo()调用了父类A的foo方法。

2. super()函数与多继承的关系

在多继承的情况下,使用super()函数调用的是MRO列表中的下一个类的方法,而不是当前类的父类的方法。

class A:
    def foo(self):
        print('调用A类方法')

class B:
    def foo(self):
        print('调用B类方法')

class C(A, B):
    def foo(self):
        super().foo()

c = C()
c.foo()

运行结果:

调用B类方法

上例中,子类C继承自父类A和B,并在foo方法中使用super().foo()调用了父类A和B的foo方法。在Python中,多继承使用DFS算法创建MRO列表。因此MRO列表中的顺序为[C, A, B, object],super()函数调用的是MRO列表中的下一个类的方法,即B类的foo方法。

三、总结

super()函数是Python中非常重要的一个函数,用于调用父类的方法。在使用时应注意其参数的传入方式,以及在多继承的情况下的使用。

合理使用super()函数可以提高代码的可读性、减少代码重复和维护成本,是每个Python工程师都需要掌握的基本技能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/21017.html

(0)
上一篇 2024-05-11
下一篇 2024-05-12

相关推荐

  • DbUTils「建议收藏」

    DbUTils「建议收藏」DBUTILS dbutils是apeach公司 封装了jdbc的jar包用来 便捷操作数据库: 核心类:QueryRunnner > 核心方法:query()查询 update()增删改 具体使用…

    2023-04-01
    167
  • Fedora 31 – 安装pgadmin4「建议收藏」

    Fedora 31 – 安装pgadmin4「建议收藏」参考指南安装pgadmin4时,发现下载网速很慢,卡在pgadmin4-docs-4.18-1.f31.noarch.rpm 国内镜像:http://mirrors.zju.edu.cn/postg…

    2023-01-26
    142
  • 用jupyter notebook打开ipynb文件——一个Python工程师的指南

    用jupyter notebook打开ipynb文件——一个Python工程师的指南我们都知道,jupyter notebook是数据科学应用程序中最流行的笔记本之一。它不仅可以帮助我们使用Python和其他编程语言进行实验、编程和数据分析,而且还可以创建和共享交互式文档,方便我们更好地展示实验的结果。而ipynb文件作为jupyter notebook文件的默认保存格式,也是进行数据分析和代码编写的重要文件。因此,在本篇文章中,我们将详细介绍如何使用jupyter notebook打开并编写ipynb文件,以便我们更好地展示和分享我们的代码和实验。

    2024-09-02
    20
  • MySQL 8.0 新特性梳理汇总「建议收藏」

    MySQL 8.0 新特性梳理汇总「建议收藏」一 历史版本发布回顾 从上图可以看出,基本遵循 5+3+3 模式 5 GA发布后,5年 就停止通用常规的更新了(功能不再更新了); 3 企业版的,+3年功能不再更新了; 3 完全停止更新了。 总之,一

    2023-05-24
    117
  • 9款最好用的MySQL数据库客户端图形界面管理工具,第三款我用了10年「建议收藏」

    9款最好用的MySQL数据库客户端图形界面管理工具,第三款我用了10年「建议收藏」MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,这里我介绍几个经常使用的MySQL图形化管理工具,供大家参考。 MySQL是一个非常流行的小型关系型数据

    2022-12-29
    167
  • 优化网页内容呈现:自然语言处理中文分词技术

    优化网页内容呈现:自然语言处理中文分词技术中文分词是对中文文本进行分隔的过程,将句子分成一个一个的词语,是自然语言处理中的重要环节。中文分词技术的主要目的是为了将中文文本转化成计算机可以理解的形式,方便进行文本分析、数据挖掘等操作。

    2024-02-04
    86
  • Understanding the PostgreSQL Architecture[通俗易懂]

    Understanding the PostgreSQL Architecture[通俗易懂]PostgreSQL is probably the most advanced database in the open source relational database market. It…

    2023-01-26
    132
  • Python嵌套if语句:实现复杂的条件判断

    Python嵌套if语句:实现复杂的条件判断条件语句是编程语言中非常重要的一种语句类型,它根据特定的条件来判断是否执行某些代码块,也可以根据不同的条件执行不同的代码块。Python中常用的条件语句包括if语句、if-else语句、if-elif语句等。

    2024-03-13
    76

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注