Python知识分享第十六天
“”"
故事7:
小明把煎饼果子技术传给徒弟的同时, 不想把独创配方传给他, 我们就要加私有.
问: 既然不想让子类用, 为什么要加私有?
答: 私有的目的不是不让子类用, 而是不让子类直接用, 而必须通过特定的 途径或者方式才能使用.
大白话: ATM机为啥要设计那么繁琐, 直接搞个大箱子, 里边放钱, 存钱就直接放进去, 取钱就直接拿多少, 何必要锁的那么严实, 留个插卡口, 键盘输入密码.
不能直接拿 要按照银行定的规矩拿
“”"
class Prentice():def __init__(self):self.congfu = '[独创煎饼果子配方]'def __make_cake(self):print(f'运用{self.congfu} 制作煎饼果子')def my_make_cake_method(self):self.__make_cake()class TuSun(Prentice):passif __name__ == '__main__':t1 = TuSun()# t1.make_cake() #报错 方法私有后通过公共的访问方式调用 # t1.__make_cake() #报错t1.my_make_cake_method()
“”"
多态介绍:
概述:
多态是指通义事物在不同时刻(环境) 表现出的不用状态, 形态
Python: 同一个函数 接收不同的对象 达到不同的效果
实现条件:
1.要有继承关系
2, 要有方法重写
3.要有父类引用 指向 子类对象
好处:
提高代码扩展性 和 可维护性
还记开发中的应用:
父类充当函数的形参类型 这样可以接受任意的子类对象 实现 传入什么子类 就调用其对应的功能
“”"
# 定义动物类 充当父类
class Animal():def speak(self):print('动物会叫')# pass # 如果多个子类的实现都不同 则直接用pass修饰即可class Dog(Animal):def speak(self):print('狗会汪汪汪的叫')class Cat(Animal):def speak(self):print('猫会喵喵喵')class Phone:def speak(self):print('手机会模仿各种声音')def print_animal(an: Animal):an.speak()if __name__ == '__main__':a = Animal()d1 = Dog()c1 = Cat()p = Phone()print_animal(d1)print_animal(c1)print_animal(p)
# 直观的感受父类引用指向子类对象
an : Animal = Dog()
“”"
需求:
构建对象对战平台object_play(英雄机, 敌机)
1. 英雄一代战机(战斗力60)与敌军战机(战斗力70)对抗。英雄1代战机失败!
2. 卧薪尝胆,英雄二代战机(战斗力80)出场!,战胜敌军战机!
3. 对象对战平台object_play, 代码不发生变化的情况下, 完成多次战斗
提示:
抽象战机类 HeroFighter AdvHeroFighter;敌机EnemyFighter;
构建对象战斗平台, 使用多态实现
“”"
class HeroFight():def power(self):return 60
class AdvHeroFight(HeroFight):def power(self):return 80
class EnemyFughter():def power(self):return 70def object_play(hero:HeroFight, enemy:EnemyFughter):if hero.power() >= enemy.power():print('凯旋')else:print('铩羽')if __name__ == '__main__':hero = HeroFight()hero2 = AdvHeroFight()enemy = EnemyFughter()object_play(hero, enemy)object_play(hero2, enemy)
“”"
抽象类解释:
概述:
有抽象方法的就叫抽象类 也叫接口
抽象方法: 没有方法体的方法 就叫抽象方法
格式:
class 类名:
def 函数名(self):
pass
作用:
抽象类一般充当父类使用 用于指定 行业规范
而具体的实现 是交由各个子类完成
需求:假设国家规定空调必须有 冷风热风左右摆风的功能 现在又格力 美的 两个厂商正产空调 请用所学 模拟此场景
“”"
# 创建抽象类 表示标准\
class AC:def cool_wind(self):passdef hot_wind(self):passdef swing_l_r(self):pass
class Gree(AC):def cool_wind(self):print('格力空调 制造冷风')def hot_wind(self):print('格力空调,制造热风')def swing_l_r(self):print('格力空调 左右摇摆')class Media(AC):def cool_wind(self):print('美的空调 制造冷风')def hot_wind(self):print('美的空调 制造冷风')def swing_l_r(self):print('美的空调 制造冷风')if __name__ == '__main__':g = Gree()m = Media()g.cool_wind()g.hot_wind()g.swing_l_r()m.cool_wind()m.hot_wind()m.swing_l_r()
(1)请写出单继承与多继承的语法格式?
“”"
# 单继承
class 类名(父类名):重写方法
# 多继承
class 类名(父类名1,父类名2 ...):重写方法
"""
# (2)什么是方法重写,为什么要方法重写?
"""
方法重写是 子类继承父类后 将继承父类的方法逻辑重新编写
重写后的方法子啊父类的功能主题上 具有子类独有的功能
""""""
(4)实操练习:
- 1.创建一个Animal(动物)基类,其中有一个run方法,输出`跑起来....`;
- 2.创建一个Horse(马)类继承于动物类,Horse类中不仅有run()方法还有eat()方法;
- 2.1run方法输出 `跑起来....`
- 2.2 eat 方法输出 `吃东西...`
"""# #创建父类
# class Animal(object):
# #父类方法
# def run(self):
# print('跑起来...')
#
# #创建子类 继承父类
# class Horse(Animal):
# #子类方法
# def eat(self):
# print('吃东西...')
#
#
# if __name__ == '__main__':
# h1 = Horse()
# h1.run()
# h1.eat()"""
(5)加强练习:
- 1.创建一个动物(Animal)的基类,其中有一个run方法, 输出`跑起来....`
- 2。创建一个Horse(马)类继承于动物类,Horse类中重写run方法,增加打印输出"`迈着矫健的步伐跑起来!!`",同时实现eat方法, 输出 `吃东西...`
"""# #创建父类
# class Animal(object):
# #父类方法
# def run(self):
# print('跑起来...')
#
# #创建子类 继承父类
# class Horse(Animal):
# #重写run方法
# def run(self):
# print('`迈着矫健的步伐跑起来!!`')
# #子类方法
# def eat(self):
# print('吃东西...')
#
#
# if __name__ == '__main__':
# h1 = Horse()
# h1.run()
# h1.eat()"""
(6)综合训练:- 1.创建一个动物(Animal)的基类,其中有一个run方法, 输出`跑起来....`
- 2.创建一个Horse(马)类继承于动物类,Horse类中不仅有run方法还有eat方法- 2.1 run方法输出 `跑起来....`- 2.2 eat 方法输出 `吃东西...`
- 3.创建一个 SwiftHorse(千里马)类继承Horse类,初始化init方法name属性为千里马,同时针对吃东西,SwiftHorse类中重写eat方法,增加打印输出"`一天可以吃一担粮食...`"
"""#
# # 创建父类
# class Animal(object):
# # 父类方法
# def run(self):
# print('跑起来...')
#
#
# # 创建子类 继承父类
# class Horse(Animal):
# # 重写run方法
# def run(self):
# print('`迈着矫健的步伐跑起来!!`')
#
# # 子类方法
# def eat(self):
# print('吃东西...')
#
#
# class SwiftHorse(Horse):
# # init初始化
# def __init__(self):
# self.name = '千里马'
#
# # 重写eat方法
# def eat(self):
# print(f'{self.name}`一天可以吃一担粮食...`')
#
#
# if __name__ == '__main__':
# h1 = Horse()
# h1.run()
# h1.eat()
#
# h2 = SwiftHorse()
# print(h2.name)
# h2.eat()"""
(7)综合训练:定义一个`Person` 类,包含初始化 init 方法:实例属性: 名字, name年龄, age"""# 创建类
class Person():# 初始化计数器 countcount = 0# init初始化参数def __init__(self, name, age):self.name = nameself.age = agePerson.count += 1def __str__(self):return f'此人的姓名为: {self.name} 年龄为: {self.age}'def __del__(self):Person.count -= 1
# 1. 记录由该类创建的对象的个数,创建一个对象,计数+1,删除一个对象,计数-1;
# count变量记录对象数
# 2. 定义一个方法,可以打印当前对象的个数;def print_count():print(f'当前对象数: {Person.count}')# 3. 定义一个方法`show_info`, 输出以下信息
# 这是一个 Person 类,谢谢查看!def show_info():print(f'这是一个 Person 类,谢谢查看!')# 需要传对象# def show_info(self):# print(f'这是一个 {self.__class__.__name__} 类,谢谢查看!')# 4. 打印对象的时候,可以输出打印自己的名字和年龄
# 我的名字是 xxx, 年龄是 xxx
# 用 __str__ 魔法方法# 5. 定义一个方法 `study`, 输出以下信息
# 我叫 xxx, 我要好好学习def study(self):print(f'我叫 {self.name} ,我要好好学习')# 6. 操作步骤
# 1. 调用`show_info `方法;
# 2. 创建两个对象, 打印当前对象,并打印当前的对象个数;
# 3. 分别使用两个对象调用`study`方法;
# 4. 删除一个对象,打印输出当前的对象个数。
if __name__ == '__main__':Person.show_info()p1 = Person('菲菲', 17)p2 = Person('波比', 18)print(p1)print(p2)Person.print_count()p1.study()p2.study()# p.show_info()# p.print_count()p2.__del__()Person.print_count()
“”"
构建对象对战平台object_play
1 英雄一代战机(战斗力60)与敌军战机(战斗力70)对抗。英雄1代战机失败!
2 卧薪尝胆,英雄二代战机(战斗力80)出场!,战胜敌军战机!
3 对象对战平台object_play, 代码不发生变化的情况下, 完成多次战斗
“”"
#
# class HeroFly():
# def fight(self):
# return 60
#
# class HeroFlyPlus(HeroFly):
# def fight(self):
# return 80
#
# class JapanFly():
# def fight(self):
# return 70
#
# def object_play(hero : HeroFly, japan : JapanFly):
# if hero.fight() >= japan.fight():
# print('凯旋')
# else:
# print('铩羽')
#
# if __name__ == '__main__':
# h1 = HeroFly()
# h2 = HeroFlyPlus()
# j1 = JapanFly()
# object_play(h1, j1)
# object_play(h2, j1)
坚持分享 共同进步 如有错误 欢迎指出
相关文章:
Python知识分享第十六天
“”" 故事7: 小明把煎饼果子技术传给徒弟的同时, 不想把独创配方传给他, 我们就要加私有. 问: 既然不想让子类用, 为什么要加私有? 答: 私有的目的不是不让子类用, 而是不让子类直接用, 而必须通过特定的 途径或者方式才能使用. 大白话: ATM机为啥要设计那么繁琐, 直接…...
管家婆财贸ERP BR045.大类存货库存数量明细表
最低适用版本: C系列 23.8 插件简要功能说明: 库存数量明细表支持按存货展示数据更多细节描述见下方详细文档 插件操作视频: 进销存类定制插件--大类存货库存数量明细表 插件详细功能文档: 应用中心增加菜单【大类存货库存数…...

Pytorch-GPU版本离线安装
最近在复现一项深度学习的工作,发现自己的pytorch是装的cpu版的(好像当时是直接加清华源,默认是cpu版本)。从官网在线下载速度太慢,还时不时断开连接,我们可以配置conda的清华源去这个问题,但是考虑到是在用…...
k8s 1.28 二进制安装与部署
第一步 :配置Linux服务器 #借助梯子工具 192.168.196.100 1C8G kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubectl、haproxy、keepalived 192.168.196.101 1C8G kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubectl、…...

【C语言】扫雷游戏(一)
我们先设计一个简单的9*9棋盘并有10个雷的扫雷游戏。 1,可以用数组存放,如果有雷就用1表示,没雷就用0表示。 2,排查(2,5)这个坐标时,我们访问周围的⼀圈8个位置黄色统计周围雷的个数是1。排查(8,6)这个坐标时…...

二分法篇——于上下边界的扭转压缩间,窥见正解辉映之光(1)
前言 二分法,这一看似简单却又充满哲理的算法,犹如一道精巧的数学之门,带领我们在问题的迷雾中找到清晰的道路。它的名字虽简单,却深藏着智慧的光辉。在科学的浩瀚星空中,二分法如一颗璀璨的星辰,指引着我们…...

# 01_Python基础到实战一飞冲天(三)--python面向对象(一)--简单类
01_Python基础到实战一飞冲天(三)–python面向对象(一)–简单类 一、面向对象-01-基本概念 1、面向对象(OOP) 面向对象编程 —— Object Oriented Programming 简写 OOP。 2、面向对象(OOP) 学习目标 了解 面向对象 基本概念…...
sentinel使用手册
1.引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>2.yaml spring:cloud:sentinel:transport:dashboard: localhost:8090 #sentinel控制台地址…...

搜索二维矩阵 II(java)
题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 代码思路: 用暴力算法: class Solution {public boolean searchMatrix(…...

Python语法基础(四)
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 高阶函数之map 高阶函数就是说,A函数作为B函数的参数,B函数就是高阶函数 map:映射 map(func,iterable) 这个是map的基本语法,…...
03_Django视图
三、Django模板 模板Templates 在Django框架中,模板是可以帮助开发者快速生成呈现给用户页面的工具 模板的设计方式实现了我们MVT中VT的解耦(M:Model,V:View,T:Template),VT有着N:M的关系,一个V可以调用任意T…...

如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件
如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件 在使用 Hugging Face 的数据集进行模型训练时,有时我们并不需要整个数据集,尤其是当数据集非常大时。为了节省存储空间和提高训练效率,我们可以从数据集中随机采样一部分数…...
11 设计模式之代理模式(送资料案例)
一、什么是代理模式? 在现实生活中,我们常常遇到这样的场景:由于某些原因,我们可能无法亲自完成某个任务,便会委托他人代为执行。在设计模式中,代理模式 就是用来解决这种“委托”问题的࿰…...

MongoDB聚合操作
1.聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档,可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类:单一作用聚合、聚合管道、MapReduce。 单一作用聚合:提供了对常见聚合过程的简单访问,…...
第二十三周周报:High-fidelity Person-centric Subject-to-Image Synthesis
目录 摘要 Abstract TDM SDM SNF 测试时的人物细节捕捉 主要贡献 总结 摘要 本周阅读了一篇2024年CVPR的关于高保真度、以人物为中心的图像合成方法的论文:High-fidelity Person-centric Subject-to-Image Synthesis。该论文提出了一种名为Face-diffuser的…...
Cesium 与 Leaflet:地理信息可视化技术比较
在现代地理信息系统(GIS)和空间数据可视化领域,Cesium 和 Leaflet 是两种非常常见的地理可视化库,它们各自适用于不同的应用场景。Cesium 专注于三维地球视图和复杂空间分析,而 Leaflet 则注重轻量级的二维地图展示。本文将对这两种技术进行详细的对比,帮助开发者根据具体…...

Linux 服务器使用指南:诞生与演进以及版本(一)
一、引言 在当今信息技术的浪潮中,Linux 操作系统无疑是一个关键的支柱😎。无论是在服务器管理、软件开发还是大数据处理领域,Linux 都以其卓越的适应性和优势脱颖而出👍。然而,对于许多新手而言,Linux 系统…...
龙蜥 Linux 安装 JDK
龙蜥 Linux 安装 JDK 下载安装解压到目标路径设置环境变量直接在启动脚本中临时设置 参考资料 下载 这个就不赘述了,参考资料中的另外两篇安装帖,都有。 如果不能上网,也可以去内网其他之前装过JDK的服务器,直接复制过来。 tar …...
Python小白语法基础20(模块与包)
0) 参考文章 python的模块(module)、包(package)及pip_python package-CSDN博客Python之函数、模块、包库_python函数、模块和包-CSDN博客Python函数模块自定义封装及模块嵌套导入(手把手教程)_python如何封装一个模块-CSDN博客 1) 模块与包说明 软件…...
详解 Qt QtPDF之QPdfPageNavigator 页面跳转
文章目录 前言头文件: 自 Qt 6.4 起继承自: 属性backAvailable : const boolcurrentLocation : const QPointFcurrentPage : const intcurrentZoom : const qrealforwardAvailable : const bool 公共函数QPdfPageNavigator(QObject *parent)virtual ~QPd…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...