Python 继承示例:有与无 `super().__init__()` 的区别

文章目录

  • Python 继承示例:有与无 `super().__init__()` 的区别
      • 父类(Parent)
      • 子类(Child)不调用 `super().__init__()`
      • 子类(Child)调用 `super().__init__()`


Python 继承示例:有与无 super().__init__() 的区别

好的,我将通过一个简单的例子来展示 super().__init__() 的作用。我们将创建两个类:Parent 作为父类,Child 作为继承自 Parent 的子类。每个类都有一个属性和一个方法,并且我们将看看在子类中是否调用 super().__init__() 的区别。

父类(Parent)

class Parent:def __init__(self):self.parent_attr = "I am from Parent"def parent_method(self):print("This is a method from Parent")

子类(Child)不调用 super().__init__()

class Child(Parent):def __init__(self):# super().__init__() 这行被注释掉了self.child_attr = "I am from Child"def child_method(self):print("This is a method from Child")# 创建子类实例并尝试访问父类的属性和方法
child_instance = Child()
print(child_instance.child_attr)  # 输出: I am from Child
child_instance.child_method()     # 输出: This is a method from Childtry:print(child_instance.parent_attr)  # 将会引发 AttributeError
except AttributeError as e:print(f"Error: {e}")               # 输出: Error: 'Child' object has no attribute 'parent_attr'try:child_instance.parent_method()     # 将会引发 AttributeError
except AttributeError as e:print(f"Error: {e}")               # 输出: Error: 'Child' object has no attribute 'parent_method'

在这个例子中,因为没有调用 super().__init__(),所以 child_instance 实例不会初始化来自 Parent 类的 parent_attr 属性,也不会定义 parent_method 方法。因此,当尝试访问这些成员时,会抛出 AttributeError 异常。

子类(Child)调用 super().__init__()

class Child(Parent):def __init__(self):super().__init__()             # 调用了父类的构造函数self.child_attr = "I am from Child"def child_method(self):print("This is a method from Child")# 创建子类实例并尝试访问父类的属性和方法
child_instance = Child()
print(child_instance.child_attr)       # 输出: I am from Child
child_instance.child_method()          # 输出: This is a method from Child
print(child_instance.parent_attr)      # 输出: I am from Parent
child_instance.parent_method()         # 输出: This is a method from Parent

在这个版本中,Child 类正确地调用了 Parent 类的构造函数,所以 child_instance 实例不仅有它自己的 child_attr 属性和 child_method 方法,而且还有从 Parent 类继承来的 parent_attr 属性和 parent_method 方法。这样,你可以成功地访问所有这些成员,而不会遇到任何错误。

这个例子展示了为什么在子类中调用 super().__init__() 是很重要的,因为它确保了父类的所有初始化逻辑都能被执行,从而保证对象能够正确地工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下部署Redis(本地部署超详细)

非docker 1、下载Redis 历史版本: http://download.redis.io/releases 我的: http://download.redis.io/releases/redis-7.0.5.tar.gz 2.安装教程 1.Redis是基于c语言编写的需要安装依赖,需要安装gcc yum install gcc-c 2.查看gcc版…

Spring——几个常用注解

环境配置 1.在配置文件中导入约束(context — 共三个)并添加一项配置( context:annotation-config/) 才能支持注解的使用 context 约束: xmlns:context“http://www.springframework.org/schema/context” 2.xsi:schemaLocation下的:" http://ww…

Oopsie【hack the box】

Oopsie 解题流程 文件上传 首先开启机器后,我们先使用 nmap -sC -SV来扫描一下IP地址: -sC:使用 Nmap 的默认脚本扫描(通常是 NSE 脚本,Nmap Scripting Engine)。这个选项会自动执行一系列常见的脚本&am…

单片机-定时器中断

1、相关知识 振荡周期1/12us; //振荡周期又称 S周期或时钟周期(晶振周期或外加振荡周期)。 状态周期1/6us; 机器周期1us; 指令周期1~4us; ①51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器…

【蓝牙】win11 笔记本电脑连接 hc-06

文章目录 前言步骤 前言 使用电脑通过蓝牙添加串口 步骤 设置 -> 蓝牙和其他设备 点击 显示更多设备 更多蓝牙设置 COM 端口 -> 添加 有可能出现卡顿,等待一会 传出 -> 浏览 点击添加 hc-06,如果没有则点击 再次搜索 确定 添加成…

Android切换语言不退出App

1.需求 实现用户选择语言(未点击下一步),更新当前界面UI,点击下一步后,更新App的语言,并进行保存。 实现目标: 1.设置App的语言,本地进行保存 2.updateResources更新本地语言配置…

一键获取Linux主机配置信息shell脚本,含网卡详情,网卡绑定等

cat > /tmp/get_os_info.sh <<"EOF"#!/bin/bashexport LANG=en_US.UTF-8# 如果 cat /proc/1/cgroup | grep docker | wc -l 大于0 或 systemd-detect-virt 返回 docker,则为 docker容器,# 如果 virt-what 返回 kvm或vmware或hyperv或xen、xen-hvm、lxc 或…

2 XDMA IP中断

三种中断 1. Legacy 定义&#xff1a;Legacy 中断是传统的中断处理方式&#xff0c;使用物理中断线&#xff08;例如 IRQ&#xff09;来传递中断信号。缺点&#xff1a; 中断线数量有限&#xff0c;通常为 16 条&#xff0c;限制了可连接设备的数量。中断处理可能会导致中断风…

【算法】时间复杂度以及O(N^2)的排序

目录 1.常数时间的操作 2.时间复杂度 2.1.以选择排序为例 2.2.O(n^2)从何而来 2.3.冒泡排序 2.3.1.抑或运算 2.4.插入排序 3.二分法 3.1.局部最小 4.递归 4.1.递归行为时间复杂度的估计 1.常数时间的操作 一个操作如果和样本的数据量无关&#xff0c;每次都是固定时…

2021 年 3 月青少年软编等考 C 语言五级真题解析

目录 T1. 红与黑思路分析T2. 密室逃脱思路分析T3. 求逆序对数思路分析T4. 最小新整数思路分析T1. 红与黑 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的…

C# 或 .NetCore 如何使用 NPOI 导出图片到 Excel 文件

今天在本文中&#xff0c;我们将尝试使用NPOI库将图像插入到 Excel 文件的特定位置。请将以下逻辑添加到您的写作方法中&#xff0c;在 Excel 文件中添加图像&#xff08;JPEG、PNG&#xff09;,我已经有一个示例 jpeg 文件 - Read-write-excel-npoi.jpg &#xff0c;我们将尝试…

【学习笔记】理解深度学习的基础:机器学习

1. 机器学习基础 1.1 机器学习的定义与重要性 定义&#xff1a;深度学习是机器学习的一种特定形式。为了深入理解深度学习&#xff0c;必须牢固掌握机器学习的基本原理。机器学习算法是一种能够从数据中学习的算法&#xff0c;通过经验E在任务T上提高性能度量P&#xff08;Mi…

Observability:将 OpenTelemetry 添加到你的 Flask 应用程序

作者&#xff1a;来自 Elastic jessgarson 待办事项列表可以帮助管理与假期计划相关的所有购物和任务。使用 Flask&#xff0c;你可以轻松创建待办事项列表应用程序&#xff0c;并使用 Elastic 作为遥测后端&#xff0c;通过 OpenTelemetry 对其进行监控。 Flask 是一个轻量级…

使用Matplotlib显示中文的方法

1 问题提出 使用图1所示的代码进行matplotlib绘图时&#xff0c;因为其默认不支持中文&#xff0c;此时无法显示正确内容&#xff0c;如图2所示。 图1 matplotlib绘图绘图代码 图2 matplotlib无法显示中文 2 问题解决 2.1 设置全局字体 在图1所示的代码中&#xff0c;第13…

详解opencv resize之INTER_LINEAR和INTER_AREA

一。先简单介绍一下resize的用法 src&#xff1a;输入图&#xff0c; dst&#xff1a;输出图 dsize&#xff1a;输出图的宽高&#xff0c;如果dsize不为空&#xff08;即宽高都不是0&#xff09;&#xff0c;则以dsize为准进行resize。 fx, fy是放大缩小的比例&#xff0c;是…

UnityDemo-TheBrave-制作笔记

这是我跟着b站up主MStudio的视频学习制作的&#xff0c;大体上没有去做一些更新的东西&#xff0c;这里只是一个总的总结。在文章的最后&#xff0c;我会放上可以游玩该游戏的链接和exe可执行文件&#xff0c;不过没有对游戏内容进行什么加工&#xff0c;只有基本的功能实现罢了…

使用LSTM预测股票收盘价

在金融数据预测中&#xff0c;LSTM&#xff08;长短期记忆网络&#xff09;凭借其在时间序列数据建模中的优势&#xff0c;成为了分析股票价格趋势的热门选择。本篇博客将以完整的代码实现为例&#xff0c;展示如何利用LSTM网络对股票收盘价进行预测&#xff0c;并从数据处理到…

模拟SpringIOCAOP

一、IOC容器 Ioc负责创建&#xff0c;管理实例&#xff0c;向使用者提供实例&#xff0c;ioc就像一个工厂一样&#xff0c;称之为Bean工厂 1.1 Bean工厂的作用 先分析一下Bean工厂应具备的行为 1、需要一个获取实例的方法&#xff0c;根据一个参数获取对应的实例 getBean(…

预编译SQL

预编译SQL 预编译SQL是指在数据库应用程序中&#xff0c;SQL语句在执行之前已经通过某种机制&#xff08;如预编译器&#xff09;进行了解析、优化和准备&#xff0c;使得实际执行时可以直接使用优化后的执行计划&#xff0c;而不需要每次都重新解析和编译。这么说可能有一些抽…

Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地

Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地 创建目录,创建配置文件启动容器命令定时备份MySQL执行脚本Linux每日定时任务命令文件内参数其他时间参数AT一次性定时任务创建目录,创建配置文件 $ mkdir -p /opt/mysql/conf$ vim /opt/mysql/conf/my.cnf[mysql] #…