python类中super() 的使用解析

yizhihongxing

下面我来详细讲解一下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日

相关文章

  • Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1的解决方法

    下面是详细的攻略步骤: 1. 确认Windows Server版本 首先,需要确认所使用的Windows Server版本是2012 R2或2016版,因为只有这两个版本才会出现无法安装.NET Framework 3.5.1的问题。 2. 启用.NET Framework 3.5.1框架 在Windows Server 2012 R2或2016中,默认情况…

    other 2023年6月27日
    00
  • VS2015编译Qt5.7.0生成支持XP的静态库(很不错)

    VS2015编译Qt5.7.0生成支持XP的静态库(很不错) 在使用Qt进行开发时,有时需要生成静态库以供其他开发者使用,同时为了兼容Windows XP系统,可以使用以下步骤在VS2015中编译Qt5.7.0生成支持XP的静态库。 步骤一:下载Qt5.7.0源码包并解压 在官网下载Qt5.7.0源码,解压到本地的一个路径下,例如 C:\Qt\qt-ever…

    其他 2023年3月28日
    00
  • nginx重启windows

    nginx重启windows nginx是一个开源的高性能HTTP和反向代理服务器。作为服务器端的工具,nginx运行过程中可能会出现各种问题,其中之一就是服务器崩溃或者需要重启。本文将介绍如何重启nginx服务器。 1. 检查nginx服务状态 在重启nginx之前,首先需要检查一下nginx服务的运行状态。可以通过打开cmd命令行窗口,输入以下命令来检查…

    其他 2023年3月28日
    00
  • 三星s8黑屏重启方法是什么?

    三星S8黑屏重启方法 三星S8是一款非常出色的智能手机,然而有时候因为各种原因,我们会遇到黑屏的情况,此时我们需要重启手机以解决问题。本文将详细讲解三星S8黑屏重启方法。 方法一:软重启 软重启不会影响手机内存,也不会丢失任何数据和文件。这是三星S8黑屏最简单的方法之一。 按住电源键和音量下键直到手机振动; 此时松开按键,等待手机自动关机再自动重启。 示例说…

    other 2023年6月26日
    00
  • Android Socket通信详解

    Android Socket通信详解 简介 Socket通信是一种网络编程技术,它提供了一种在不同设备间进行通信的方式。在Android应用中,如果需要实现跨设备间的通信,可以使用Socket来实现。 使用Socket通信需要建立两个端点,一个是客户端,一个是服务器端。客户端和服务器可以通过Socket进行通信,从而实现数据交换。 Socket通信的基本原理…

    other 2023年6月27日
    00
  • foxmail邮箱怎么注销?解除foxmail与qq号码绑定的详细教程

    Foxmail邮箱注销攻略 如果你想注销Foxmail邮箱并解除与QQ号码的绑定,下面是详细的教程。请按照以下步骤进行操作: 步骤一:登录Foxmail邮箱账号 首先,打开Foxmail邮箱登录页面,并使用你的账号和密码登录。 步骤二:进入账号设置 登录成功后,点击页面右上角的用户头像或用户名,然后选择“设置”选项。 步骤三:解除与QQ号码的绑定 在账号设置…

    other 2023年8月5日
    00
  • Android基于OpenGL的GLSurfaceView创建一个Activity实现方法

    下面是详细讲解“Android基于OpenGL的GLSurfaceView创建一个Activity实现方法”的完整攻略。 前置知识 在学习本攻略前,建议您已经具备以下知识: Android基础知识、Java编程基础知识; 熟悉Android编程中Activity、View的相关知识; OpenGL ES的基本概念和使用方法。 创建GLSurfaceView …

    other 2023年6月27日
    00
  • 简易jquery插件

    当然,我可以为您提供详细的“简易jQuery插件”的完整攻略,包括两个示例说明。 简易jQuery插件的完整攻略 jQuery是一个流行的JavaScript库,它提供了许多实用的功能和方法,可以简化JavaScript编程。jQuery插件是一种扩展jQuery功能方式,可以我们轻松地添加自定义功能和效果。在本教程中,我们将介绍如何编写一个简易的jQuer…

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