Python程序设计 类与继承

一. 继承的概念

生活中的继承,一般指的是子女继承父辈的财产。

  • 拓展1:经典类或旧式类

不由任意内置类型派生出的类,称之为经典类。

class 类名:代码......

拓展2:新式类

# 父类A
class A(object):def __init__(self):self.num = 1def info_print(self):print(self.num)# 子类B
class B(A):passresult = B()
result.info_print()  # 1

在Python中,所有类默认继承object类,object类是顶级类或基类;其他子类叫做派生类。

二. 单继承

故事主线:一个煎饼果子老师傅,在煎饼果子界摸爬滚打多年,研发了一套精湛的摊煎饼果子的技术。师父要把这套技术传授给他的唯一的最得意的徒弟。

分析:徒弟是不是要继承师父的所有技术?

# 1. 师父类,属性和方法
class Master(object):def __init__(self):self.secret = '[古法煎饼果子配方]'def make_cake(self):print(f'运用{self.secret}制作煎饼果子')# 2. 定义徒弟类,继承师父类
class Prentice(Master):pass# 3. 用徒弟类创建对象,调用实例属性和方法
wanzi = Prentice()
print(wanzi.secret)
wanzi.make_cake()

三. 多继承

故事推进:小明是个爱学习的好孩子,想学习更多的煎饼果子技术,于是,在百度搜索到CSDN,报班学习煎饼果子技术。

所谓多继承意思就是一个类同时继承了多个父类。

# 1. 师父类,属性和方法
class Master(object):def __init__(self):self.secret = '[古法煎饼果子配方]'def make_cake(self):print(f'运用{self.secret}制作煎饼果子')# 为了验证多继承,添加School父类
class School(object):def __init__(self):self.secret = '[CSDN煎饼果子配方]'def make_cake(self):print(f'运用{self.secret}制作煎饼果子')# 2. 定义徒弟类,继承师父类 和 学校类
class Prentice(Master, School):  # 如果一个类继承多个父类,优先继承第一个父类的同名属性和方法pass# 3. 用徒弟类创建对象,调用实例属性和方法
wanzi = Prentice()
print(wanzi.secret)
wanzi.make_cake()

注意:当一个类有多个父类的时候,默认使用第一个父类的同名属性和方法。

四. 子类重写父类同名方法和属性

故事:小明掌握了师父和培训的技术后,自己潜心钻研出自己的独门配方的一套全新的煎饼果子技术。

# 1. 师父类,属性和方法
class Master(object):def __init__(self):self.secret = '[古法煎饼果子配方]'def make_cake(self):print(f'运用{self.secret}制作煎饼果子')class School(object):def __init__(self):self.secret = '[CSDN煎饼果子配方]'def make_cake(self):print(f'运用{self.secret}制作煎饼果子')# 2. 定义徒弟类,继承师父类 和 学校类, 添加和父类同名的属性和方法
class Prentice(School, Master):def __init__(self):self.secret = '[独创煎饼果子技术]'def make_cake(self):print(f'运用{self.secret}制作煎饼果子')# 3. 用徒弟类创建对象,调用实例属性和方法
wanzi = Prentice()
print(wanzi.secret)
wanzi.make_cake()

类和父类具有同名属性和方法,默认使用子类的同名属性和方法。

五. 子类调用父类的同名方法和属性

故事:很多顾客都希望也能吃到古法和CSDN的技术的煎饼果子。


# 1. 师父类,属性和方法
class Master(object):def __init__(self):self.secret = '[古法煎饼果子配方]'def make_cake(self):print(f'运用{self.secret}制作煎饼果子')# 为了验证多继承,添加School父类
class School(object):def __init__(self):self.secret = '[CSDN煎饼果子配方]'def make_cake(self):print(f'运用{self.secret}制作煎饼果子')# 2. 定义徒弟类,继承师父类 和 学校类, 添加和父类同名的属性和方法
class Prentice(School, Master):def __init__(self):self.secret = '[独创煎饼果子技术]'def make_cake(self):self.__init__()  # 子类的 __init__print(f'运用{self.secret}制作煎饼果子')# 子类调用父类的同名方法和属性:把父类的同名属性和方法再次封装def make_master_cake(self):Master.__init__(self)  # 父类的 __init__Master.make_cake(self)def make_school_cake(self):School.__init__(self)  # 父类的 __init__School.make_cake(self)# 3. 用徒弟类创建对象,调用实例属性和方法
daqiu = Prentice()
daqiu.make_cake()
daqiu.make_master_cake()
daqiu.make_school_cake()

六. 多层继承

故事:N年后,小明老了,想要把所有技术传承给自己的徒弟。

# 1. 师父类,属性和方法
class Master(object):def __init__(self):self.kongfu = '[古法煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')# 为了验证多继承,添加School父类
class School(object):def __init__(self):self.kongfu = '[CSDN煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')# 2. 定义徒弟类,继承师父类 和 学校类, 添加和父类同名的属性和方法
class Prentice(School, Master):def __init__(self):self.kongfu = '[独创煎饼果子技术]'def make_cake(self):self.__init__()print(f'运用{self.kongfu}制作煎饼果子')# 子类调用父类的同名方法和属性:把父类的同名属性和方法再次封装def make_master_cake(self):Master.__init__(self)Master.make_cake(self)def make_school_cake(self):School.__init__(self)School.make_cake(self)# 步骤:1. 创建类Tusun, 用这个类创建对象;2. 用这个对象调用父类的属性或方法看能否成功
class Tusun(Prentice):passzx = Tusun()
zx.make_cake()
zx.make_master_cake()
zx.make_school_cake()

七. super()调用父类方法

class Master(object):def __init__(self):self.kongfu = '[古法煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')class School(Master):def __init__(self):self.kongfu = '[CSDN煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')# 方法2.1# super(School, self).__init__()# super(School, self).make_cake()# 方法2.2super().__init__()super().make_cake()class Prentice(School):def __init__(self):self.kongfu = '[独创煎饼果子技术]'def make_cake(self):self.__init__()print(f'运用{self.kongfu}制作煎饼果子')# 子类调用父类的同名方法和属性:把父类的同名属性和方法再次封装def make_master_cake(self):Master.__init__(self)Master.make_cake(self)def make_school_cake(self):School.__init__(self)School.make_cake(self)# 一次性调用父类的同名属性和方法def make_old_cake(self):# 方法一:代码冗余;父类类名如果变化,这里代码需要频繁修改# Master.__init__(self)# Master.make_cake(self)# School.__init__(self)# School.make_cake(self)# 方法二: super()# 方法2.1 super(当前类名, self).函数()# super(Prentice, self).__init__()# super(Prentice, self).make_cake()# 方法2.2 super().函数()super().__init__()super().make_cake()wanzi = Prentice()
wanzi.make_old_cake()

注意:使用super() 可以自动查找父类。调用顺序遵循 __mro__ 类属性的顺序。比较适合单继承使用。

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

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

相关文章

error: ‘mutex’ in namespace ‘boost’ does not name a type 解决办法

在ubuntu下使用make编译的时候出现错误: error: ‘boost::mutex’ has not been declared 以及: error: ‘mutex’ in namespace ‘boost’ does not name a type 等错误,原因是有可能是没有安装boost或者是没有添加boost头文件&#xff…

使用Python的scipy.integrate计算微积分

先上一个二重积分计算,来自2022年考研数学第二题 进行计算前先在终端下载 scipy包 pip install scipy 在脚本中先导入所需要的模块 import scipy.integrate as spi 定义函数f(x, y) ,所得值返回 def f(x, y): return y / (1 x**3)**0.5 定义…

基于springboot+vue的影院订票系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

LeetCode Python - 71. 简化路径

目录 题目描述解法运行结果 题目描述 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中,一个点(.&…

一图理解递归-算法通关村

一图理解递归-算法通关村 递归是我们算法进阶的基础,是必须要掌握的内容,只有掌握了递归才算真的会算法。与递归有关的问题有: 与树和二叉树相关的大部问题二分查找相关的问题快速排序、归并排序相关的问题所有回溯的问题所有动态规划的问题 …

大数据分析-基于Python的网络爬虫及数据处理---智联招聘人才招聘特征分析与挖掘的算法实现

概要 随着科学技术的发展,人类进入了互联网时代,不仅数据量庞大,而且数据种类繁多,Python简单易学, 语法清晰,在数据操作方面有着一定优势,成为了数据采集和可视化领域的热门语言。本论文主要是使用Python来…

golang 使用AES加密

在使用AES加密数据后,将加密结果使用base64.StdEncoding.EncodeToString处理的原因是多方面的: 可读性:AES加密后的数据通常是二进制格式,直接查看或处理这些二进制数据不方便也不直观。Base64编码将这些二进制数据转换为ASCII字符…

Kruskal最小生成树【详细解释+动图图解】【sort中的cmp函数】 【例题:洛谷P3366 【模板】最小生成树】

文章目录 Kruskal算法简介Kruskal算法前置知识sort 中的cmp函数 算法思考样例详细示范与解释kruskal模版code↓ 例题:洛谷P3366 【模板】最小生成树code↓完结撒花QWQ Kruskal算法简介 K r u s k a l Kruskal Kruskal 是基于贪心算法的 M S T MST MST 算法&#xff…

导师坚鹏:厦门火炬高新区数字化转型战略蓝图从规划到落地培训

厦门火炬高新区战略制胜:数字化转型战略蓝图从规划到落地培训 厦门国家火炬高技术产业开发区(简称“厦门国家火炬高新区”)1991年被国务院批准为全国首批国家级高新区,是全国三个以“火炬”冠名的国家高新区之一。目前&#xff0c…

CPU密集的高效访问和数据安全

import asyncio import concurrent.futures import random # 全局变量,用于存储计算结果的列表 list1 [] list2 [] lock asyncio.Lock() # 异步锁 # CPU计算密集型任务 async def cpu_intensive_task(): global list1, list2 # 获取异步锁 async with…

Excel通过下拉菜单,显示不同图片

背景:有的时候需要通过更改下拉菜单来改变对应的 值/ 图片。 如果是数值的话就是我们常常用的Vlookup,这个可以很简单的实现这个功能。(这个如果不知道请自行百度) 但是如果是图片呢?这个就不常见了,那么…

Unity中关于SendMessage方法

在Unity中,SendMessage 方法用于在游戏对象及其所有子对象上调用指定名称的方法。这种方法可以用于在不需要知道接收方的确切类型的情况下,向游戏对象发送消息。 基本语法如下: void SendMessage(string methodName, object value null, S…

机器学习:随机森林算法

随机森林算法 决策树与随机森林随机森林 决策树与随机森林 随机森林可以看作一个决策树的集合,由n个子训练集得到的决策树组成。 决策树(Decision tree)是一种特殊的树结构,由一个决策图和可能的结果(例如成本和风险…

java使用socket实现一个简单的聊天室

1. 服务端 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List;public class ChatServer {private static final int PORT 8070;private static List<ClientHandler> clients ne…

芯片工程系列(5)2.5D 3D封装

0 英语缩写 硅通孔&#xff08;Through Silicon Via&#xff0c;TSV&#xff09;硅中介层&#xff08;Silicon Interposer&#xff09;物理气象沉淀法&#xff08;Physical Vapor Deposition&#xff0c;PVD&#xff09;DRIE、CVD、PVD、CMP等设备CoWoS&#xff08;Chip on Wa…

【开发环境搭建篇】Nacos的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

利用K8S Statefulset搭建Etcd集群 - 本地存储

目录 概述测试环境yaml配置service.yamlcluster.yaml Q&A参考链接 概述 公司因项目需要使用K8S部署ETCD集群供其他业务调用&#xff0c;网上搜索了解了下&#xff0c;一般K8S搭建ETCD集群大部分都是使用Etcd Operator来搭建。但是公司的项目运行在离线ARM架构平台&#xf…

安卓手机系统跳过app启动广告软件

跳过广告关于此应用声明&#xff1a; 应用利用了安卓系统的辅助功能API&#xff0c;可以读取您手机屏幕上显示的所有内容&#xff0c;并且可以以您的名义进行屏幕点击等操作。* 轻量无广告&#xff0c;不联网&#xff0c;也不需要任何权限&#xff1b;* 请务必在系统设置中开启…

【C++】分球

题目描述 7个人分球&#xff0c;共有n个球&#xff0c;所有人得到的球必须相等。请输出最少剩下的球数。 输入 输入一行一个正整数n&#xff08;可能存在前导零&#xff09;。 输出 输出一行一个整数&#xff0c;如题所述答案。 样例输入 Copy 50样例输出 Copy 1提示 …

Redis中AOF、RDB和复制功能对过期键的处理

AOF、RDB和复制功能对过期键的处理 生成RDB文件 在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时&#xff0c;程序会对数据库中的键进行检查&#xff0c;已过期的键不会被保存到新创建的RDB文件中。 例子 举个例子&#xff0c;如果数据库中包含三个键k1、k2、k3&#x…