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() 函数来调用父类方法,以保证继承链上各个类定义的方法都得以执行。

阅读剩余 52%

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

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

相关文章

  • 桌面右键快捷方式无效 压haozip快捷方式打不开的解决方法

    桌面右键快捷方式无效 压haozip快捷方式打不开的解决方法 如果你在使用Windows操作系统时遇到了桌面右键快捷方式无效或者压haozip快捷方式打不开的情况,可能会让你感到很困惑。本文将会为你提供解决这类问题的有效方法。 方法一:重置Windows资源管理器 当Windows资源管理器出现错误时,可能会导致桌面右键快捷方式无效或者压haozip快捷方式…

    other 2023年6月27日
    00
  • Android Glide的简单使用

    Android Glide的简单使用 1. 简介 Android Glide是一个流行的图片加载库,它能够快速地加载并显示图片,同时还支持缓存,图片变换等功能。Glide具有高性能、易用性和可配置性等优点,能够满足大多数图片加载需求。 2. 开始使用 2.1 添加依赖 在app模块的build.gradle文件中添加以下依赖: dependencies { …

    other 2023年6月27日
    00
  • break的使用for循环嵌套示例

    当在嵌套的for循环中使用break语句时,它会立即终止当前循环,并跳出整个循环结构。下面是一个详细的攻略,其中包含两个示例说明。 示例1:找到特定元素并跳出循环 假设我们有一个二维列表,我们想要在其中查找特定的元素,并在找到后跳出循环。以下是一个使用break语句的示例代码: matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9…

    other 2023年7月28日
    00
  • 六大接口管理平台 总有一款适合你的!

    六大接口管理平台总有一款适合你的! 接口管理平台是一种用于管理API接口的工具,它可以帮助开发人员更好地管理和维API接口。在本文中,我们将介绍六大接口管理平,包括Swagger、Postman、Insomnia、Apiary、Apigee和light,并提供完整攻略,帮助你选择最适合你的接口管理平台。 1. Swagger Swagger是一种开源的API…

    other 2023年5月7日
    00
  • conda使用清华源设置channel的镜像

    以下是使用清华源设置conda channel镜像的完整攻略: 打开终端或命令行界面。 使用以下命令备份原始的.condarc文件(如果存在): cp ~/.condarc ~/.condarc.backup 使用文本编辑器打开.condarc文件: nano ~/.condarc 在.condarc文件中添加以下内容,设置清华源作为channel的镜像: …

    other 2023年10月16日
    00
  • Android的HTTP操作库Volley的基本使用教程

    Volley是Google在2013年开源的一款优秀的HTTP操作库,能够帮助Android开发者快速地进行网络请求操作。在本篇攻略中,我们将介绍Volley的基本用法,包括如何添加依赖库、创建RequestQueue对象、创建StringRequest对象等详细步骤,并带有两个示例说明供开发者参考。 一、添加Volley依赖库 要使用Volley库,首先需…

    other 2023年6月27日
    00
  • Android Fragment使用全解

    Android Fragment使用全解 什么是Fragment Fragment是Android中提供的一种组件,它可以被视为Activity中的“子Activity”,可以嵌套在Activity中并且具有相同的生命周期。通过使用Fragment,我们可以轻松地实现模块化设计和灵活的UI界面。 Fragment的生命周期 Fragment的生命周期与Act…

    other 2023年6月27日
    00
  • iphone11怎么设置快速重启 快速重启方法介绍

    iPhone 11快速重启设置和方法介绍 如其名,快速重启是让 iPhone 在不用完全关机的情况下重新启动,由于无需大规模的磁盘扫描和其他清理工作,因此速度较其他方法更快。 以下是你可以通过设置和按键的组合来快速重启你的 iPhone 11 设置快速重启 1.打开设置应用程序 2.选择“通用” 3.向下滚动,选择“关闭” 4.向下滚动至“关闭” 5.选择“…

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