Python学习基础笔记五十三——单继承

news2024/11/25 18:25:28

1、派生属性:

当然子类也可以添加自己的新的属性或者在这里重新定义这些属性(不会影响到父类),需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性,就以自己为准了。

例1:

class Animal:
    def __init__(self, name, aggr, hp):
        self.name = name
        self.aggr = aggr
        self.hp = hp


class Dog(Animal):
    def __init__(self, name, aggr, hp, kind):
        Animal.__init__(self, name, aggr, hp)      # 此处self是狗创建的self
        self.kind = kind                           # 派生属性

    def bite(self, person):
        person.hp -= self.aggr


class Person(Animal):
    def __init__(self, name, aggr, hp, sex, money):
        Animal.__init__(self, name, aggr, hp)       # 此处self是人创建的self
        self.sex = sex                              # 派生属性
        self.money = money

    def attack(self, dog):
        dog.hp -= self.aggr


dog = Dog('Wangcai', 20, 100, 'teddy')
print(dog.name)

这段代码中,我们在Dog类中增加了kind属性,这个属性是父类中没有的属性,那这个属性就是派生属性。我们增加了Animal.__init__(self.name, aggr, hp)这段代码。我这边就指名道信地调用Animal父类的__init__函数,然后参数包括self都传进来了。Dog就是在原来的基础上增加了派生属性。

2、派生方法:

class Animal:
    def __init__(self, name, aggr, hp):
        self.name = name
        self.aggr = aggr
        self.hp = hp

    def eat(self):
        print('吃药回血')
        self.hp += 100


class Dog(Animal):
    def __init__(self, name, aggr, hp, kind):
        Animal.__init__(self, name, aggr, hp)      # 此处self是狗创建的self
        self.kind = kind                           # 派生属性

    def bite(self, person):
        person.hp -= self.aggr


class Person(Animal):
    def __init__(self, name, aggr, hp, sex, money):
        Animal.__init__(self, name, aggr, hp)       # 此处self是人创建的self
        self.sex = sex                              # 派生属性
        self.money = money

    def attack(self, dog):
        dog.hp -= self.aggr


dog = Dog('Wangcai', 20, 100, 'teddy')
print(dog.hp)
dog.eat()
print(dog.hp)

alex = Person('Alex', 30, 200, 'non', 100)
print(alex.hp)
alex.eat()
print(alex.hp)

父类中没有的属性,在子类中出现,就叫作派生属性。

父类中没有的方法,在子类中出现,就叫作派生方法。

只要是子类的对象调用,子类中有的名字一定用子类的,子类中没有的名字才会去找父类的,如果父类也没有,就报错。

如果父类、子类都有,就用子类的。

如果还想用父类的,就单独调用父类的。

class Animal:
    def __init__(self, name, aggr, hp):
        self.name = name
        self.aggr = aggr
        self.hp = hp

    def eat(self):
        print('吃药回血')
        self.hp += 100


class Dog(Animal):
    def __init__(self, name, aggr, hp, kind, teeth):
        Animal.__init__(self, name, aggr, hp)      # 此处self是狗创建的self
        self.kind = kind                           # 派生属性
        self.teeth = 0

    def eat(self):
        Animal.eat(self)
        self.teeth += 2

    def bite(self, person):
        person.hp -= self.aggr


class Person(Animal):
    def __init__(self, name, aggr, hp, sex, money):
        Animal.__init__(self, name, aggr, hp)       # 此处self是人创建的self
        self.sex = sex                              # 派生属性
        self.money = money

    def attack(self, dog):
        dog.hp -= self.aggr


dog = Dog('Wangcai', 20, 100, 'teddy',0)
print(dog.hp)
dog.eat()
print(dog.hp)
print(dog.teeth)

alex = Person('Alex', 30, 200, 'non', 100)
print(alex.hp)
alex.eat()
print(alex.hp)

执行结果:

3、super函数:

在Python3中,子类执行父类的方法也可以直接使用super方法。

class Animal:
    def __init__(self, name, aggr, hp):
        self.name = name
        self.aggr = aggr
        self.hp = hp

    def eat(self):
        print('吃药回血')
        self.hp += 100


class Dog(Animal):
    def __init__(self, name, aggr, hp, kind, teeth):
        super().__init__(name, aggr, hp)             # 调用了父类的init函数
        self.kind = kind                             # 派生属性
        self.teeth = 0

    def eat(self):
        Animal.eat(self)
        self.teeth += 2

    def bite(self, person):
        person.hp -= self.aggr


class Person(Animal):
    def __init__(self, name, aggr, hp, sex, money):
        super().__init__(name, aggr, hp)            # 此处self是人创建的self
        self.sex = sex                              # 派生属性
        self.money = money

    def attack(self, dog):
        dog.hp -= self.aggr


dog = Dog('Wangcai', 20, 100, 'teddy',0)
print(dog.hp)
dog.eat()
print(dog.hp)
print(dog.teeth)

alex = Person('Alex', 30, 200, 'non', 100)
print(alex.hp)
alex.eat()
print(alex.hp)

super()就相当于super(Dog, self)。super()就可以找到父类。

super() 只在新式类当中才有,Python3中所有的类都是新式类。

4、在类外也可以执行super()

super(Dog, dog).eat()

说明:如果super在类中使用,不需要传参数。如果super在类的外部使用,必须要给它传递参数。

5、通过继承建立了派生类与基类之间的关系,它是一种“是”的关系。

当类之间有很多相同的功能,提取这些相同的功能做成基类,用继承比较好,比如教授是老师。

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

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

相关文章

在Windows中使用Nginx配置部署springboot+vue项目

Nginx 链接:https://pan.baidu.com/s/1c-9JJ3e63rNNeSRuEFh0Ow?pwdaamb 提取码:aamb 配置 解压后进入到 conf 目录下,修改 nginx.conf 文件,将下面的内容直接复制粘贴进去即可。 events {worker_connections 1024; ## Defa…

分享即时通讯音视频开发编码标准

即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙。原因在于:实时音视频技术 音视频处理技术 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的。 视频通讯过程是视频和音频的实时双向完整通讯过程。在…

java学习day62(乐友商城)商品规格设计与商品查询的页面实现

1.商品规格数据结构 乐优商城是一个全品类的电商网站,因此商品的种类繁多,每一件商品,其属性又有差别。为了更准确描述商品及细分差别,抽象出两个概念:SPU和SKU,了解一下: 1.1.SPU和SKU SPU&…

恒温恒湿实验室(房)建设、设计SICOLAB

通用实验室是指适用于多学科的以实验台规模进行经常性科学研究和实验工作的实验室,其夏季空气调节室内计算参数为温度 26~28℃,相对湿度小于 65%,在规范中没有对温湿度控制精度及洁净度做相关要求。专用实验室是指有特定环境要求&…

C++基础学习三

目录儿六、分支语句和逻辑操作符6.1 if语句6.1.1 if6.1.2 if-else6.1.3 if-else if-else6.2 逻辑表达式6.2.1 逻辑或||6.2.2 逻辑与&&6.2.3 逻辑非!6.2.4 逻辑操作符的其他表示方式6.3 字符函数库cctype6.4 三目/元操作符6.5 switch语句6.5.1 switch引入枚举常量6.6 br…

【OpenCall】ICASSP2023通用会议理解及生成挑战赛邀请函

ICASSP2023 通用会议理解及生成挑战赛(General Meeting Understanding and Generation Challenge,缩写为 MUG)是ICASSP2023 系列大挑战(SPGC)之一,由魔搭ModelScope社区、阿里巴巴达摩院语音实验室&语言技术实验室,阿里云天池联合浙江大学数字媒体计…

Linux基本搭建和操作

Linux基本搭建和操作1、创建三台虚拟机2、创建使用SSH远程连接3、实现IP地址与主机名的映射4、关闭和禁用防火墙5、创建目录结构6、压缩打包7、安装软件包安装jdk安装mysql8、创建脚本文件9、运行脚本文件10、免密登录配置11、远程拷贝文件1、创建三台虚拟机 序号虚拟机名称静…

高效技巧-打表法

打表法 打表是一种典型的用空间换时间的技巧 一般指将所有可能需要用到的结果事先计算出来,这样后面需要用到时就可以直接查表获得。 打表常见的用法有如下几种: ①在程序中一次性计算出所有需要用到的结果,之后的查询直接取这些结果这个是最常用到的…

开源之路——如何发布属于自己的npm包

开源之路——如何发布属于自己的npm包1、前言2、起步2.1、初始化项目2.2、安装webpack相关依赖2.3、添加入口文件和封装方法2.4、设置源2.5、添加用户2.6、发布3、使用1、前言 在进行开发的过程当中,难免会出现一些重复性的工作,例如说我们要对一个数组…

电脑如何格式化重装系统

​众所周知,默认情况下,计算机重新安装系统将设置格式化磁盘。如果您选择其他需要格式化的硬盘,您必须如何操作?一般来说,我们是pe手动格式磁盘可以避免立即格式化硬盘造成的一些问题。让我们谈谈如何格式化硬盘重做系…

【软件测试】测试的天花板?资深测试怎么一路爬的......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试职业的天花板是…

脑图谱的验证方法

方法 目的 与其他分割比较区域内的同质性 比较不同分割的平均区域内同质性 有约束的几何扰动比较 验证分割区域内部的功能同质性 留一交叉验证 验证相似矩阵的稳定性 剪影宽度silhouette width (SI) 计算簇内和簇外的功能信号相似性差异 骰子系数dice coefficient 衡…

G1D36-import-keras.save_model-code-沐沐的调参课

1、python导入函数 https://zhuanlan.zhihu.com/p/64893308 服了 https://blog.csdn.net/weixin_45195364/article/details/119857246?spm1001.2101.3001.6650.6&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-1198572…

OSCS开源安全周报第22期:NuGet 仓库中被发现 13.5 万个包含钓鱼地址的组件包

本周安全态势综述 OSCS 社区共收录安全漏洞15个&#xff0c;公开漏洞值得关注的是 Jenkins Google Login Plugin 存在开放重定向漏洞&#xff08;CVE-2022-46683&#xff09;&#xff0c;Netty <4.1.86.Final 存在拒绝服务漏洞&#xff08;CVE-2022-41881&#xff09;&…

【数据结构】Java实现顺序表

文章目录线性表顺序表顺序表的模拟实现1、新增元素,默认在数组最后新增2、判定是否包含某个元素3、查找某个元素对应的位置4、获取顺序表长度5、在 pos 位置新增元素6、获取 pos 位置的元素7、给 pos 位置的元素设为 value8、删除第一次出现的关键字key9、清除顺序表线性表 什…

接口性能测试,这个还真有用啊。

目录&#xff1a;导读 一、概述 二、为什么要做接口压力测试 三、接口压力测试的局限性 四、谁来做接口压力测试 五、如何做接口压力测试 六、如何设计接口压力测试方案 七、压力测试报告应该包含哪些结果 八、如何解读压力测试的结果 九、如何根据测试结果定位性能问…

Pandas提取数据的几种方式

文章目录前言Pandas读取数据的几种方式1. read_csv2. read_excel3. read_sql总结前言 快期末了&#xff0c;数据挖掘的大作业需要用到python的相关知识&#xff08;这太难为我这个以前主学C的人了&#xff0c;不过没办法还是得学&#x1f602;&#xff09;&#xff0c;下面是我…

[附源码]计算机毕业设计Python的疫苗接种管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

算法刷题打卡第50天:排序数组---快速排序

排序数组 难度&#xff1a;中等 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5]快速排…

安科瑞霍尔闭环电流传感器在电动观光旅游车上的应用浅析

摘要&#xff1a; 本文介绍了基于霍尔闭环原理&#xff0c;即磁平衡式原理的电流传感器在电动观光旅游车上的使用方法&#xff0c;替代传统的霍尔器件&#xff0c;较好的解决了电动车行业现有霍尔传感器的基本问题&#xff0c;在稳定性上更加优越。 关键词&#xff1a;霍尔闭…