派生类中调用基类的__init__()方法

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

在派生类中定义__init__()方法时,不会自动调用基类的__init__()方法。例如,定义一个Fruit类,在__init__()方法中创建类属性color,然后在Fruit类中定义一个harvest()方法,在该方法中输出类属性color的值,再创建继承自Fruit类的Apple类,最后创建Apple类的实例,并调用harvest()方法,代码如下:

class Fruit:                          # 定义水果类(基类)

    def __init__(self,color = "绿色"):

        Fruit.color = color                 # 定义类属性

    def harvest(self):

        print("水果原来是:" + Fruit.color + "的!")    # 输出的是类属性color

class Apple(Fruit):                      # 定义苹果类(派生类)

    def __init__(self):

        print("我是苹果")

apple = Apple()                          # 创建类的实例(苹果)

apple.harvest()                          # 调用基类的harvest()方法

执行上面的代码后,将显示如图20所示的异常信息。

图20  基类的__init__()方法未执行引起的异常

因此,要让派生类调用基类的__init__()方法进行必要的初始化,需要在派生类使用super()函数调用基类的__init__()方法。例如,在上面代码的第8行代码的下方添加以下代码:

super().__init__()                                    # 调用基类的__init__()方法

注意:在添加上面的代码时,一定要注意缩进的正确性。

运行后将显示以下正常的运行结果:

我是苹果

水果原来是:绿色的!

下面通过一个具体实例演示派生类中调用基类的__init__()方法的具体的应用。

图标 (35)

  实例05  在派生类中调用基类的__init__()方法定义类属性

在IDLE中创建一个名称为fruit.py的文件,然后在该文件中定义一个水果类Fruit(作为基类),并在该类中定义__init__()方法,在该方法中定义一个类属性(用于保存水果默认的颜色),然后在Fruit类中定义一个harvest()方法,再创建Apple类和Sapodilla类,都继承自Fruit类,最后创建Apple类和Sapodilla类的实例,并调用harvest()方法(在基类中编写),代码如下:

class Fruit:                                             # 定义水果类(基类)

    def __init__(self, color="绿色"):

        Fruit.color = color                             # 定义类属性

    def harvest(self, color):

        print("水果是:" + self.color + "的!")          # 输出的是形式参数color

        print("水果已经收获……")

        print("水果原来是:" + Fruit.color + "的!")     # 输出的是类属性color

class Apple(Fruit):                                      # 定义苹果类(派生类)

    color = "红色"

    def __init__(self):

        print("我是苹果")

        super().__init__()                               # 调用基类的__init__()方法

class Sapodilla(Fruit):                                  # 定义人参果类(派生类)

    def __init__(self, color):

        print("\n我是人参果")

        super().__init__(color)                           # 调用基类的__init__()方法

    # 重写harvest()方法的代码

    def harvest(self, color):

        print("人参果是:" + color + "的!")               # 输出的是形式参数color

        print("人参果已经收获……")

        print("人参果原来是:" + Fruit.color + "的!")    # 输出的是类属性color

apple = Apple()                                          # 创建类的实例(苹果)

apple.harvest(apple.color)                                # 调用harvest()方法

sapodilla = Sapodilla("白色")                             # 创建类的实例(人参果)

sapodilla.harvest("金黄色带紫色条纹")                      # 调用harvest()方法

执行上面的代码,将显示如图21所示的运行结果。

图21  在派生类中调用基类的__init__()方法定义类属性

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

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

相关文章

【安卓基础】-- 消息机制 Handler

目录 消息机制 Handler面试问题 消息机制 Handler 对handler机制的基本作用、用法、时序流程进行介绍,针对handler机制中的内存泄漏问题讲解:一篇读懂Android Handler机制 Android-Handler机制详解 全面解析 | Android之Handler机制 需要掌握的&#x…

通过非欧几何体改变 AI 嵌入

目录 一、说明 二、LLM嵌入的形势 三、了解一些背景信息 3.1 什么是嵌入? 3.2 为什么嵌入在 NLP 中很重要? 3.3 复数Complex 几何的角色 3.4 C主动学习 3.5 角度嵌入 (AE):解锁稳健排序 3.6 RotatE:将关系…

浅谈序列化

序列化的基本概念 序列化(Serialization)是将对象的状态转换为字节流的过程,而反序列化(Deserialization)则是将字节流恢复为对象的过程。这一过程允许对象能够被保存到文件、传输通过网络、保存到数据库或其他数据存…

如何高效地向Redis 6插入亿级别的数据

如何高效地向Redis插入亿级别的数据 背景不可用的方案可用方案:利用管道插入其他命令:参考: 背景 上一条记录;80G的存储;10几个文件,如何快速导入是一个大问题,也是一个很棘手的问题;如下将给出…

day-37 最大正方形

思路 动态规划,这题主要得弄明白状态转换方程,dp[i][j]表示以(i,j)为右下角的最大正方形 解题方法 1.首先将第一行和第一列初始化,当对应位置的matrix为’0’时,dp数组对应位置也为零,否则为1 …

【工具】探索 DOU:每用户数据使用量

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 🎵 邓紫棋《光年之外》 什么是 DOU…

重学java 55. 集合 Set接口

我救自己万万次,铮铮劲草,绝不动摇 —— 24.6.2 一、Set集合介绍 Set和Map密切相关的 Map的遍历需要先变成单列集合,只能变成set集合 二、HashSet集合的介绍和使用 1.概述 HashSet是Set接口的实现类 2.特点 a、元素唯一 b、元素无序 c、无索引…

前端面试题日常练-day48 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末 1. 在Bootstrap中,以下哪个类用于创建一个具有响应式的导航栏? a) .navbar-responsive b) .responsive-nav c) .navbar-collapse d) .nav-responsive 2. 哪个Bootstrap类用于…

开源VS闭源:大模型之争,究竟谁更胜一筹?

随着人工智能技术的快速发展,大模型作为其中的核心组件,已经引起了业界的广泛关注。在大模型的研发过程中,开源与闭源成为了两个备受争议的话题。究竟开源与闭源谁更好?本文将从多个角度进行深入分析,为大家揭示真相。…

Windows API 编程

Windows API 函数大全 (推荐):https://blog.csdn.net/xiao_yi_xiao/article/details/121604742Windows API 在线参考手册:http://www.office-cn.net/t/api/index.html?web.htmWindows 开发文档 (官方):https://learn.microsoft.com/zh-cn/wi…

如何把图片保存成16位png格式?

在进行图像处理的过程中,见过8位和24位的图片,然而还没见过16位的,其实也有,比如对于灰度图,就是相当于利用65535个灰度级进行灰度存储。而8位就是256个位置存储。相当于就是0-255. 今天尝试了巨久,用pyth…

重载运算符C++---学习笔记

一、笔记 1. 重载运算符基础知识 重载运算符进行的运算和普通数的加减运算不同之处在于重载运算符的操作数为一个一个自定义的对象,所以相应的要对普通的运算符如-*%/的调用方法进行重写,重载的本质还是函数调用 2. 重载运算符的语法 重载运算符的语…

Kubernetes-使用集群CA证书给用户颁发客户端证书访问Api-Server

一、官网地址 证书和证书签名请求 | Kubernetes 二、Demo 一、创建测试文件夹 cd ~ mkdir add_k8s_user_demo cd add_k8s_user_demo 二、创建符合X509标准的证书 openssl genrsa -out myuser.key 2048 openssl req -new -key myuser.key -out myuser.csr -subj "/CNmy…

自动微分技术在 AI for science 中的应用

本文简记我在学习自动微分相关技术时遇到的知识点。 反向传播和自动微分 以 NN 为代表的深度学习技术展现出了强大的参数拟合能力,人们通过堆叠固定的 layer 就能轻松设计出满足要求的参数拟合器。 例如,大部分图神经网络均基于消息传递的架构。在推理…

Jitsi meet 退出房间后,用户还在房间内

前言 Jitsi Meet 如果客户端非正常退出会议,会产生用户还在房间内,实际用户已经退出的情况,需要一段时间内,才会在UI离开房间,虽然影响不大,但是也容易导致体验不好。 保活 Jitsi Meet 会和前端做一个保…

QT中如何将对第三方库进行翻译

1、背景 在我们的程序中,可能会加载其他人写的模块,,该模块是以库的形式提供的,那么我们程序翻译时,如何来对引入的第三方库进行翻译??? 2、方案 首先,第三方库会有自己的翻译文件,并且一般要给我们提供设置翻译的接口, 例如下:第三方库给我们暴露一个接口,我们…

带交互的卡尔曼滤滤波|一维滤波|源代码

背景 一维卡尔曼滤波的MATLAB例程,​背景为温度估计。 代码介绍 运行程序后,可以自己输入温度真实值: 以20℃为例,得到如下的估计值​: 滤波前的值和滤波后的值分别于期望值(真实值)作差…

基于Jenkins+Kubernetes+GitLab+Harbor构建CICD平台

1. 实验环境 1.1 k8s环境 1)Kubernetes 集群版本是 1.20.6 2)k8s控制节点: IP:192.168.140.130 主机名:k8s-master 配置:4C6G 3)k8s工作节点 节点1: IP:192.1…

lucene 9.10向量检索基本用法

Lucene 9.10 中的 KnnFloatVectorQuery 是用来执行最近邻(k-Nearest Neighbors,kNN)搜索的查询类,它可以在一个字段中搜索与目标向量最相似的k个向量。以下是 KnnFloatVectorQuery 的基本用法和代码示例。 1. 索引向量字段 首先…

Linux 自动化升级Jar程序,指定Jar程序版本进行部署脚本

文章目录 一、环境准备二、脚本1. 自动化升级Jar程序2. 指定Jar程序版本进行部署总结一、环境准备 本文在 CentOS 7.9 环境演示,以springboot为例,打包后生成文件名加上版本号,如下打包之后为strategy-api-0.3.2.jar: pom.xml<?xml version="1.0" encoding=&…