python类中super() 的使用解析

下面我来详细讲解一下python类中super()的使用解析。

什么是super()函数

在python中,使用 super() 函数可以让我们在子类中调用父类的方法和属性,实现多重继承时也可以保证实例化调用的先后顺序。

简单来说,super() 函数是用来调用父类中定义的方法的工具,它可以帮助我们避免硬编码(Hard Coding),同时提高代码的重用性。

super()函数的调用方式

super() 函数的调用方式有两种:经典类和新式类。

经典类

经典类指的是在python2中没有显式继承 object 类的类,使用 super() 函数也要使用 super([type[, object-or-type]]) 形式的参数。其中 type 是当前类对象(即继承下来的类),object-or-type 是当前实例化对象(即最终调用的类)。

下面是一个简单的经典类示例:

class Parent:
    def __init__(self, name):
        self.name = name

    def sayHello(self):
        print("Hello,", self.name)


class Child(Parent):
    def sayHello(self):
        super(Child, self).sayHello()

child = Child('Tom')
child.sayHello()

输出结果:

Hello, Tom

新式类

新式类的定义方法是在类定义中继承 object 类,使用 super([type[, object-or-type]]) 形式的参数是绝对不必要的。

下面是一个简单的新式类示例:

class Parent(object):
    def __init__(self, name):
        self.name = name

    def sayHello(self):
        print("Hello,", self.name)


class Child(Parent):
    def sayHello(self):
        super().sayHello()

child = Child('Tom')
child.sayHello()

输出结果:

Hello, Tom

super()函数的使用场景

super() 函数最典型的使用场景是在进行多重继承时,调用继承链上的其他类中的方法或属性。

下面是一个多重继承的示例:

class Parent1(object):
    def sayHello(self):
        print("Hello from Parent1")


class Parent2(object):
    def sayHello(self):
        print("Hello from Parent2")


class Child(Parent1, Parent2):
    def sayHello(self):
        super().sayHello()

child = Child()
child.sayHello()

输出结果:

Hello from Parent1

可以看到,由于 Child 类继承自 Parent1Parent2 两个类,但又同时都定义了 sayHello() 方法,因此需要通过 super() 函数来调用父类方法,以保证继承链上各个类定义的方法都得以执行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python类中super() 的使用解析 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 解决IE10以下对象不支持“bind”属性或方法

    解决IE10以下对象不支持“bind”属性或方法的完整攻略 在IE10以下的浏览器中,对象不支持“bind”属性或方法,这会导致一些JavaScript代码无法正常运行。本文将为您提供一份解决IE10以下对象不支持“bind”属性或方法的完整攻略,包括实现思路、解决方法和两个示例说明。 实现思路 解决IE10以下对象不支持“bind”属性或方法的实现思路如下…

    other 2023年5月5日
    00
  • Microsoft Office 2007 SP1 简体中文正式版 升级包官方下载地址

    Microsoft Office 2007 SP1 简体中文正式版 升级包官方下载地址攻略 Microsoft Office 2007 SP1 简体中文正式版 升级包是用于更新 Microsoft Office 2007 到 Service Pack 1 版本的官方升级包。下面是详细的攻略,包括下载地址和示例说明。 下载地址 你可以通过以下步骤获取 Micr…

    other 2023年8月4日
    00
  • PowerToys首个Win10预览版发布 重启的Windows工具集

    PowerToys首个Win10预览版发布 重启的Windows工具集 微软 PowerToys 是一组免费的 Windows 工具,可以增强 Windows 系统的使用体验,最近其首个 Win10 预览版也已经发布。本文将为大家介绍 PowerToys 的主要功能及使用方法。 功能介绍 PowerToys 有多项功能,如下: FancyZones 该工具可…

    other 2023年6月27日
    00
  • Android实现带进度条的WebView

    Android实现带进度条的WebView攻略 在Android应用中实现带进度条的WebView可以提供更好的用户体验。下面是一个完整的攻略,包含了两个示例说明。 步骤1:布局文件 首先,在布局文件中定义一个ProgressBar和一个WebView,如下所示: <RelativeLayout xmlns:android=\"http://…

    other 2023年9月7日
    00
  • MyBatis XML去除多余AND|OR前缀或逗号等后缀的操作

    MyBatis XML去除多余AND|OR前缀或逗号等后缀的操作攻略 在MyBatis中,有时候我们在构建动态SQL语句时会遇到一些问题,比如在使用<if>标签时,可能会导致生成的SQL语句出现多余的AND或OR前缀,或者在使用<foreach>标签时,可能会导致生成的SQL语句出现多余的逗号等后缀。本攻略将详细介绍如何去除这些多余的…

    other 2023年8月5日
    00
  • linux常见配置文件

    以下是“Linux常见配置文件的完整攻略”的标准markdown格式文本,其中包含了两个示例说明: Linux常见配置文件 Linux系统中有许多配置文件,这些文件用于配置系统和应用程序的行为。本文将介绍Linux系统中常见的配置文件,包括如何使用和示例说明。 1. /etc/passwd /etc/passwd文件是Linux系统中存储用户信息的文件。每个…

    other 2023年5月10日
    00
  • React中使用UMEditor的方法示例

    为了方便理解,我将分为以下几个部分来讲解React中使用UMEditor的方法示例。 1. 简介 UMEditor是一款基于JavaScript的所见即所得富文本编辑器,支持多种平台和浏览器。同时,React是一款非常流行的JavaScript库,用于构建用户界面。 在React应用中,如果需要使用UMEditor,可以选择以下两种方法: 使用已经封装好的R…

    other 2023年6月27日
    00
  • Linux常用硬盘管理相关命令介绍

    Linux是一款广泛使用的操作系统,而硬盘的管理是Linux系统中的一个非常重要的任务。本文将介绍几个Linux常用的硬盘管理命令,详细说明具体用法和注意事项。 1. fdisk命令 fdisk命令是一个分区工具,可以对硬盘进行分区操作。使用fdisk命令需要root权限。 1.1 创建分区 fdisk /dev/sda 使用fdisk命令打开硬盘sda,然…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部