python中super().__init__()作用详解

yizhihongxing

下面我将详细讲解一下 "python中super().init()作用详解" 的相关知识。

什么是super().init()方法?

在Python中,当我们定义一个子类(派生类)时,如果需要对其父类(基类)的属性或方法进行调用,我们通常使用 super() 函数。super() 函数返回一个临时的对象,通过该对象可以调用父类中的方法。

而对于 super().__init__() 方法,它是直接调用父类的 __init__() 方法,用于初始化父类的属性。在子类中使用 super().__init__() 方法会先执行父类的构造方法,然后再执行子类的构造方法。

super().init() 的作用

当我们在子类中定义了 __init__() 方法时,如果需要修改父类中的属性的值或调用父类中的其他方法,就需要使用 super().__init__() 方法来调用父类的构造方法。

具体来说,使用 super().__init__() 方法的作用有以下几种:

  1. 初始化父类的属性
    通过 super().__init__() 方法,可以调用父类的构造方法,初始化父类的属性。例如,在下面的示例代码中,子类 B 继承于父类 A,并在 __init__() 方法中调用了 super().__init__(x) 方法,给父类 A 的属性 self.x 赋值。

```python
class A:
def init(self, x):
self.x = x

class B(A):
def init(self, x, y):
super().init(x)
self.y = y

b = B(1, 2)
print(b.x) # 输出 1
```

  1. 调用父类的方法
    通过 super().__init__() 方法,我们还可以调用父类中的其他方法。例如,在下面的示例代码中,子类 B 继承于父类 A,并在 __init__() 方法中调用了父类 A 的方法 foo()

```python
class A:
def foo(self):
print('foo from A')

class B(A):
def init(self, x):
super().init()
self.x = x

   def foo(self):
       print('foo from B')

b = B(1)
b.foo() # 输出 "foo from B"
super(B, b).foo() # 输出 "foo from A"
```

其中,通过 super(B, b) 获取到了 B 的父类,即 A,然后调用了 foo() 方法。

示例说明

为了更加深入地理解 super().__init__() 方法,我们来看两个更加具体的示例。

示例一

假设我们需要定义一个 Square 类来表示正方形,我们知道正方形的周长和面积的计算公式分别是:

  • 周长 = 4 * a
  • 面积 = a * a

其中,a 为正方形的边长。我们可以定义 Square 类如下:

class Square:
    def __init__(self, a):
        self.a = a

    def perimeter(self):
        return 4 * self.a

    def area(self):
        return self.a * self.a

其中,__init__() 方法用于初始化正方形的边长,perimeter() 方法用于计算正方形的周长,area() 方法用于计算正方形的面积。

现在,我们需要定义一个 ColorSquare 类,继承 Square 类,并在此基础上新增一个属性 color 来表示正方形的颜色。我们可以定义 ColorSquare 类如下:

class ColorSquare(Square):
    def __init__(self, a, color):
        self.color = color
        super().__init__(a)

    def __str__(self):
        return f"边长为 {self.a} 的 {self.color} 正方形"

在上面的示例代码中,我们新增了 __str__() 方法用于打印正方形的边长和颜色信息。在 __init__() 方法中,我们使用了 super().__init__(a) 方法来初始化父类 Square 中的属性 self.a,并新增了属性 self.color

使用 ColorSquare 类,我们可以创建一个红色的正方形对象,并输出其信息:

cs = ColorSquare(5, 'red')
print(cs)   # 输出 "边长为 5 的 red 正方形"
print(cs.perimeter())   # 输出 20
print(cs.area())   # 输出 25

示例二

假设我们需要定义一个 Animal 类来表示动物,其中 __init__() 方法用于初始化动物的属性(如年龄、性别等),run() 方法用于打印动物的奔跑信息。我们可以定义 Animal 类如下:

class Animal:
    def __init__(self, age, gender):
        self.age = age
        self.gender = gender

    def run(self):
        print('动物开始奔跑')

现在,我们需要定义两个子类 CatDog,分别继承 Animal 类,并增加它们独有的方法(如 meow()bark())。我们可以定义 CatDog 类如下:

class Cat(Animal):
    def meow(self):
        print('猫喵喵叫')

    def run(self):
        print('猫突然加速')


class Dog(Animal):
    def bark(self):
        print('狗汪汪叫')

    def run(self):
        print('狗疯狂奔跑')

在上面的示例代码中,CatDog 类分别继承于父类 Animal,并分别增加了 meow()bark() 方法。同时,CatDog 类中还重写了父类 Animal 中的 run() 方法。

使用 Cat 类和 Dog 类,我们可以创建一个猫对象和一个狗对象,并分别调用它们的方法:

c = Cat(2, 'male')
c.run()    # 输出 "猫突然加速"
c.meow()   # 输出 "猫喵喵叫"

d = Dog(3, 'female')
d.run()    # 输出 "狗疯狂奔跑"
d.bark()   # 输出 "狗汪汪叫"

super(Cat, c).run()    # 输出 "动物开始奔跑"

其中,通过 super(Cat, c).run() 这样的方式,我们可以调用父类 Animal 中的 run() 方法。

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

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

相关文章

  • Android 开机应用扫描相关总结

    Android 开机应用扫描相关总结 在Android系统中,开机应用扫描是指在设备启动时自动扫描并运行指定的应用程序。以下是开机应用扫描的相关总结: 使用BroadcastReceiver接收开机广播 Android系统在设备启动完成后会发送一个开机广播(ACTION_BOOT_COMPLETED),我们可以通过注册一个BroadcastReceiver来…

    other 2023年10月13日
    00
  • ios12 beta6描述文件在哪 iOS12beta6描述文件下载地址及安装教程

    iOS 12 Beta 6 描述文件的获取和安装攻略 描述文件的获取 要获取 iOS 12 Beta 6 描述文件,您可以按照以下步骤进行操作: 打开您的设备的 Safari 浏览器。 在地址栏中输入以下网址:https://developer.apple.com/download/。 登录您的 Apple 开发者帐户。如果您还没有帐户,您需要先注册一个。 …

    other 2023年8月4日
    00
  • 项目中Axios二次封装实例Demo

    下面我将详细讲解”项目中Axios二次封装实例Demo”的完整攻略。 首先,我们需要明确的是Axios是一个重要的HTTP库,用来发送AJAX请求,其具有易用的API、自动转换的JSON数据、客户端和服务端程序员可使用的promise等特性。 但是,在实际的项目中,我们可能需要对Axios进行二次封装,以便我们更好的处理业务逻辑。因此,我们需要遵循以下的步骤…

    other 2023年6月25日
    00
  • mysql字符串函数详细汇总

    MySQL 字符串函数详细汇总 MySQL 字符串函数是对字符串的操作函数。这些函数可以用来提取、操作和转换字符串的值。本文将会介绍 MySQL 数据库中可用的一些常见字符串函数。 CONCAT CONCAT() 函数用于将两个或多个字符串连接起来。它将参数作为字符串连接到一起。 示例: SELECT CONCAT(‘Hello’, ‘ World’); 输…

    other 2023年6月20日
    00
  • 详解Android TabHost的多种实现方法 附源码下载

    详解Android TabHost的多种实现方法 附源码下载 简介 Android TabHost是一个用于实现选项卡界面的控件,可以在一个界面中显示多个选项卡,并通过切换选项卡来显示不同的内容。本攻略将详细介绍Android TabHost的多种实现方法,并提供源码下载。 方法一:使用TabHost和TabWidget 首先,在XML布局文件中定义TabH…

    other 2023年9月7日
    00
  • 使用华为云鲲鹏弹性云服务器部署Discuz的详细过程

    使用华为云鲲鹏弹性云服务器部署Discuz的过程可以分为以下几步: 创建鲲鹏弹性云服务器 配置服务器环境 安装与配置MySQL 下载与配置Discuz 安装与配置nginx 配置防火墙 下面详细介绍每一步的具体操作过程: 创建鲲鹏弹性云服务器 在华为云上创建鲲鹏弹性云服务器的过程可以参考官方文档:https://support.huaweicloud.com…

    other 2023年6月26日
    00
  • parrotlinux(parrotsecurity)安装

    Parrot Linux安装攻略 Parrot Linux是一款基于Debian的Linux发行版,专注于网络安全和数字取证。本攻略将详细介绍如何安装Parrot Linux。 准备工作 在开始安装之前,我们需要准备以下工具: 一台计算机 一个USB启动盘(至少8GB) Parrot Linux的ISO镜像文件 Rufus或Etcher等工具 步骤 以下是安…

    other 2023年5月9日
    00
  • Android原生态实现分享转发功能实例

    Android原生态实现分享转发功能实例攻略 介绍 在Android应用中实现分享转发功能是一项常见的需求。本攻略将详细介绍如何使用Android原生态实现分享转发功能,并提供两个示例说明。 步骤 步骤一:添加分享按钮 首先,在你的布局文件中添加一个分享按钮,可以使用ImageButton或者ImageView来实现。例如: <ImageButton …

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