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…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...