Python知识分享第十五天

“”"
细节:
1.如下定义的类的几种写法 并无任何区别 最终效果都一样 只是写法不同
2.所有的类都直接或间接继承自object 它是所有类的父类

定义类的格式
格式1
class 类名:
pass
格式2
class 类名():
pass
格式3
class 类名(父类名):
pass
“”"

# 需求: 通过上述的三种写法 定义一个学生类
class Student:passclass Student():passclass Student(object):pass

“”"
继承介绍:
概述:
Pyhton中的继承是指子类继承父类的属性和方法
现实中是子承父业
格式
class 类A(类B):
pass
叫法:
类A: 子类 派生类
类B: 父类 基类 超类
好处:
1.提高代码的复用性
2.让类与类之间产生关系 是多态的前提
弊端:
类与类之间的耦合性增强了 父类不好的成员 子类想没有都不行
开发原则:
高内聚 低耦合
内聚 = 类自己独立处理问题的能力
耦合 = 类之间的关系
细节: 所有的类都直接或间接继承自object 它是所有类的父类(也叫 顶类 基类)
“”"

# 案例 定义父类Father 默认性别 男 爱好:散步
# 定义子类Son 尝试调用父类的成员class Father:def __init__(self):self.gender = '男'def walk(self):print('饭后走一走 能活九十九')class Son(Father):passif __name__ == '__main__':s1 = Son()print(s1.gender)s1.walk()

“”"
单继承解释:
指的是1个子类 只能继承自1个父类
该子类会从父类中继承过来 属性 或者方法
故事1:
一个摊煎饼的老师傅,在煎饼果子界摸爬滚打多年,研发了一套精湛的摊煎饼技术, 师父要把这套技术传授给他的唯一的最得意的徒弟。
分析:
师傅类: Master, 父类
属性: kongfu = ‘古法摊煎饼配方’
行为: make_cake(), 具体的摊煎饼动作.

徒弟类: Prentice, 子类继承父类即可.   

“”"

class Master():def __init__(self):self.congfu = '[古法摊煎饼配方]'def make_cake(self):print(f'使用{self.congfu} 制做煎饼果子')
# 徒弟类
class Prentice(Master):passif __name__ == '__main__':p = Prentice()print(p.congfu)p.make_cake()

“”"
故事2:
小明是个爱学习的孩子, 想学习更多的摊煎饼果子配方, 于是来到了新东方学校, 报班学习摊煎饼果子技术.

细节:
1. Python中是支持多继承 和 单继承的.
2. 子类可以从多个父类中继承属性 和 行为.
3. 如果多个父类有重名的属性 或者 行为时, 默认会按照: 从左往右的顺序继承, 即: 只会继承左边父类的成员.
4. Python中内置有mro(Method Resolution Order, 方法解析顺序)机制, 可以查看继承的解析顺序.
5. Python中多继承的写法为:
class 子类名(父类名1, 父类名2…):
pass
“”"

class Master():def __init__(self):self.congfu = '[古法摊煎饼配方]'def make_cake(self):print('我是老师傅')print(f'使用{self.congfu} 制做煎饼果子')class School():def __init__(self):self.congfu = '[新东方顶级煎饼果子配方]'def make_cake(self):print('我是新东方')print(f'使用{self.congfu} 制做煎饼果子')# 徒弟类
class Prentice(School, Master):passif __name__ == '__main__':p = Prentice()print(p.congfu)p.make_cake()

“”"
故事3:
小明掌握了老师傅和新东方的技术后, 自己潜心钻研出一套自己的 独门配方的全新摊煎饼果子技术.

方法重写解释:
概述:
方法重写也叫方法覆写, 指的是: 子类出现和父类重名的(一模一样)的方法时, 称为: 方法重写.
应用场景:
当子类需要沿袭父类的功能主体, 而功能主体又有自己独有需求(功能)的时候, 就可以考虑从父类继承过来函数,
并重写, 做优化升级.
“”"

class Master():def __init__(self):self.congfu = '[古法摊煎饼配方]'def make_cake(self):print('我是老师傅')print(f'使用{self.congfu} 制做煎饼果子')class School():def __init__(self):self.congfu = '[新东方顶级煎饼果子配方]'def make_cake(self):print('我是新东方')print(f'使用{self.congfu} 制做煎饼果子')# 徒弟类
class Prentice(School, Master):def __init__(self):self.congfu = '[独创的煎饼果子秘料]'def make_cake(self):print('我是徒弟 -> Prentice类')print(f'使用 {self.congfu} 制作煎饼果子.')if __name__ == '__main__':p = Prentice()print(p.congfu)p.make_cake()

“”"
故事4:
很多顾客希望既能迟到徒弟独创配方的煎饼果子, 还希望吃到新东方配方以及老师傅配方的煎饼果子.

目的: 演示子类中如何访问父类的成员.
方式1: 父类名.方法名(self)
特点: 可以精准访问, 如果有多个父类的情况下, 想用哪个父类的, 就用哪个父类的.
方式2: super().方法名()
特点: 只能初始化最左边那个父类的成员.
“”"

class Master():def __init__(self):self.congfu = '[古法摊煎饼配方]'def make_cake(self):print('我是老师傅')print(f'使用{self.congfu} 制做煎饼果子')class School():def __init__(self):self.congfu = '[新东方顶级煎饼果子配方]'def make_cake(self):print('我是新东方')print(f'使用{self.congfu} 制做煎饼果子')# 徒弟类
class Prentice(School, Master):def __init__(self):self.congfu = '[独创的煎饼果子秘料]'def make_cake(self):print('我是徒弟 -> Prentice类')print(f'使用 {self.congfu} 制作煎饼果子.')# 需求: 子类中如何访问父类的成员?# 方式1: 父类名.方法名(self)  -> 精准访问.def make_master_cake(self):Master.__init__(self)Master.make_cake(self)def make_school_cake(self):School.__init__(self)School.make_cake(self)# 方式2: super().方法名()  -> 只能初始化最左边那个父类的成员.def make_old_cake(self):super().__init__()super().make_cake()if __name__ == '__main__':p = Prentice()print(p.congfu)p.make_cake()print('-' * 22)# 访问父类的成员.p.make_master_cake()print('-' * 22)p.make_school_cake()p.make_old_cake()

“”"
多层继承:
概述:
类之间的继承是有传递性的, 类A继承类B, 类B继承类C, 这就是: 多层继承.
易混淆:
多层继承: 类A -> 继承类B, 类B -> 继承类C
多继承: 类A -> 类B, 类C…

故事6:
N年后, 小明把他的独创配方 和 新东方配方, 传给了他的徒弟.
“”"


class Master:def __init__(self):self.congfu = '[古法摊煎饼果子配方]'def make_cake(self):print(f'运用 {self.congfu} 制作煎饼果子')class School:def __init__(self):self.congfu = '[新东方摊煎饼果子配方]'def make_cake(self):print(f'运用 {self.congfu} 制作煎饼果子')class Prentice(School, Master):def __init__(self):self.congfu = '[独创摊煎饼果子配方]'def make_cake(self):print(f'运用 {self.congfu} 制作煎饼果子')# 演示: 子类访问父类的成员.def make_old_cake(self):super().__init__()super().make_cake()class TuSun(Prentice):      # MRO: TuSun -> Prentice -> School -> Master -> object -> 报错passif __name__ == '__main__':# 创建徒孙类对象.ts = TuSun()# 调用函数.print(ts.congfu)        # 独创ts.make_cake()          # 独创ts.make_old_cake()      # 运用 [新东方摊煎饼果子配方] 制作煎饼果子

“”"
封装介绍:
概述:
Python中的封装 = 隐藏对象的属性和实现细节, 仅对外提供公共的访问方式.
现实世界的封装 = 插板, 电脑, 手机…
名词解释:
怎么隐藏?
答: 通过 __ 实现, 例如: __属性名, __方法名()

    私有后, 如何访问私有内容呢?答:类内: 直接使用, 无所谓.类外: 不能直接调用, 必须通过 类提供的 公共的访问方式来调用.注意: 这里的公共的访问方式 =  get_xxx() 和 set_xxx()函数.get_xxx() 和 set_xxx()函数必须成对出现吗?答: 不一定, 看需求. 只获取就用 getXxx(), 只设置就用setXxx(), 如果需求不明确, 建议都写.

故事7:
小明把技术传给徒弟的同时, 不想把自己的私房钱 5000000 继承给徒弟, 请用所学, 模拟这个知识点.
“”"

class Prentice:def __init__(self):self.congfu = '[独创摊煎饼果子配方]'self.__money = 5000000def make_cake(self):print(f'运用{self.congfu}制作煎饼果子')def get_money(self):return self.__moneydef set_money(self, money):self.__money = moneyclass TuSun(Prentice):passif __name__ == '__main__':ts = TuSun()print(ts.congfu)ts.make_cake()print('-' * 22)# print(ts.money) # 报错# print(ts.__money) # 报错# 设置值# ts.set_money(-100) ts.set_money(100)       # 合法值# 获取值print(ts.get_money())

昨日知识考察题:

# (1)举例说明生活中的案例:分别以面向过程、面向对象方式思考
# 举例:
#     1.比如租房子
#         面向过程: 需要自己去小区内各个楼层去寻找招租信息,需要想业主调查有没有出租房屋的需求,统计房源信息,然后与房东协商租金等费用问题
#         面向对象: 找一个中介,中介会把这些事情处理好,我们只需要和中介对接就行# (2)说一说类和对象是什么?
# 类是一类事物的集合,由属性和方法组成,属性代表事物的特征.自带的特点, 行为表示此类事物可以执行的操作
# 对象就是类下的具体的一个事物,可以使用类的属性和行为# (3)尝试使用思维导图总结今天的知识
# 见文件外# 实操题# (1)定义一个手机类,能开机、能关机、可以拍照。
# class Phone():
#     def open(self):
#         print('我能开机')
#
#     def clsoe(self):
#         print('我能关机')
#
#     def photo(self):
#         print('我能拍照')
#
#
# if __name__ == '__main__':
#     p = Phone()
#     p.open()
#     p.clsoe()
#     p.photo()# (2)定义一个电脑类,并给电脑添加品牌、价格等属性,同时电脑能用于编程、看视频。
# class Computer():
#     def __init__(self, brand, price):
#         self.brand = brand
#         self.price = price
#
#     def program(self):
#         print('我能编程')
#
#     def movie(self):
#         print('我能看视频')
#
#     def __str__(self):
#         return f'一台: {self.brand} 电脑的价格为: {self.price}'
#
#
# if __name__ == '__main__':
#     c1 = Computer('Mac', 99999)
#     print(c1)
#     c1.movie()
#     c1.program()# (3)尝试定义一个算法工程师类,同时使用`__init__()`初始化岗位名称、薪资金额等属性,工作内容是每天码代码,同时使用`__str__()`展示对象所拥有的所有信息。
# class Algorithm():
#     def __init__(self, post, salary):
#         self.post = post
#         self.salary = salary
#
#     def code(self):
#         print('我每天都在努力的写代码')
#
#     def __str__(self):
#         return f'我的岗位是: {self.post} 薪资为: {self.salary}'
#
# if __name__ == '__main__':
#     a1 = Algorithm('算法岗', 999999)
#     print(a1)
#     a1.code()# (4)独立编写一遍课堂案例:减肥案例
# class Sport():
#     def __init__(self,weight):
#         self.current_weight = weight
#
#     def eat(self):
#         self.current_weight += 2
#         print(f'大餐后现在体重是: {self.current_weight}')
#
#     def run(self):
#         self.current_weight -= 0.5
#         print(f'运动后现在体重是: {self.current_weight}')
#
#     def __str__(self):
#         return f'当前体重是: {self.current_weight}'
#
#
# if __name__ == '__main__':
#     s1 = Sport(100)
#     s1.run()
#     s1.eat()
#     s1.run()
#     s1.eat()
#     print(s1)

(5)独立编写一遍课堂案例:烤地瓜案例

“”"
需求:
已知地瓜类(SweetPotato), 属性: 烘烤时间, 生熟状态, 调料, 行为: 烘烤动作, 不同烘烤时间, 地瓜的状态不同, 请用所学, 模拟该知识点.
地瓜烘烤时间及生熟状态:
烘烤时间(包左不包右, 前闭后开) 生熟状态
0 ~ 3 生的
3 ~ 7 半生不熟
7 ~ 12 熟了
超过12分钟 已烤焦, 糊了
“”"

class SweetPotato():def __init__(self):self.cook_time = 0self.state = '生的'self.condiments = []def cook(self, time):if time < 0:print('请输入正确烘烤时间')else:self.cook_time += timeif 0 <= self.cook_time < 3:self.state = '生的'elif 3 <= self.cook_time < 7:self.state = '半生不熟'elif 7 <= self.cook_time <= 12:self.state = '熟了'else:self.state = '已烤焦,糊了'def cond(self, *args):self.condiments.extend(args)# self.condiments.append(args)def __str__(self):return f'烘烤时间为: {self.cook_time} 烧烤状态为: {self.state} 添加的调料为; {self.condiments}'if __name__ == '__main__':s1 = SweetPotato()print(s1)s1.cook(10)s1.cond('番茄酱', '芝士', '奶油')print(s1)

坚持分享 共同进步 手敲 如有错误 欢迎指出

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

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

相关文章

遥感数据集:FTW全球农田边界和对应影像数据,约160万田块边界及7万多个样本

Fields of The World (FTW) 是一个面向农业田地边界实例分割的基准数据集&#xff0c;旨在推动机器学习模型的发展&#xff0c;满足全球农业监测对高精度、可扩展的田地边界数据的需求。该数据集由kerner-lab提供&#xff0c;于2024年8月28日发布&#xff0c;主要特征包括&…

USB Type-C一线通扩展屏:多场景应用,重塑高效办公与极致娱乐体验

在追求高效与便捷的时代&#xff0c;启明智显USB Type-C一线通扩展屏方案正以其独特的优势&#xff0c;成为众多职场人士、娱乐爱好者和游戏玩家的首选。这款扩展屏不仅具备卓越的性能和广泛的兼容性&#xff0c;更能在多个应用场景中发挥出其独特的价值。 USB2.0显卡&#xff…

项目二技巧一

目录 nginx实现根据域名来访问不同的ip端口 配置Maven私服 快照版和发布版的区别 快照版本&#xff08;Snapshot&#xff09; 发布版本&#xff08;Release&#xff09; 导入发布版的父工程 理清楚授权规则 一.首先浏览器发送/manager/**路径请求 第二步&#xff1a;构造…

如何更好地设计SaaS系统架构

SaaS&#xff08;Software as a Service&#xff09;架构设计的核心目标是满足多租户需求、支持弹性扩展和高性能&#xff0c;同时保持低成本和高可靠性。一个成功的SaaS系统需要兼顾技术架构、资源利用、用户体验和商业目标。本文从以下几个方面探讨如何更好地设计SaaS系统架构…

手搓一个不用中间件的分表策略

场景&#xff1a;针对一些特别的项目&#xff0c;不用中间件&#xff0c;以月为维度进行分表&#xff0c;代码详细设计方案 1. 定义分片策略 首先&#xff0c;定义一个分片策略类&#xff0c;用于决定数据存储在哪个分表中 import java.time.LocalDate; import java.time.fo…

详解SpringCloud集成Camunda7.19实现工作流审批(二)

本章将分享的是camunda流程设计器--Camunda Modeler的基本使用&#xff08;对应camunda版本是7.19&#xff09;&#xff0c;包括bpmn流程图画法&#xff0c;各种控件使用以及一些日常业务场景的流程图的实现 参考资料&#xff1a; Camunda BPMN 基础组件-CSDN博客 Camunda: Exe…

webpack(react)基本构建

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它的主要功能是将各种资源&#xff08;如 JavaScript、CSS、图片等&#xff09;视为模块&#xff0c;并将它们打包成一个或多个输出文件&#xff0c;以便…

html select下拉多选 修改yselect.js插件实现下拉多选,搜索,限制选中,默认回显等操作

需求&#xff1a;要在select标签实现下拉多选&#xff0c;搜索&#xff0c;限制选中&#xff0c;默认回显等操作&#xff0c;之前同事用的yselect.js&#xff0c;网上用的简直是寥寥无几&#xff0c;找了半天没找到限制选中的方法&#xff0c;看了源代码才发现根本没有&#xf…

c++哈希表(原理、实现、开放寻址法)适合新手

c系列哈希的原理及实现&#xff08;上&#xff09; 文章目录 c系列哈希的原理及实现&#xff08;上&#xff09;前言一、哈希的概念二、哈希冲突三、哈希冲突解决3.1、开放寻址法3.2、删除操作3.3、负载因子四、代码实现 总结 前言 红黑树平衡树和哈希有不同的用途。 红黑树、…

了解HTTPS以及CA在其中的作用

在这个信息爆炸的时代&#xff0c;每一次指尖轻触屏幕&#xff0c;都是一次数据的旅行。但您是否真正了解&#xff0c;这些数据在通往目的地的旅途中&#xff0c;是如何被保护的呢&#xff1f; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是一种安全的网…

electron-vite_14窗口默认全屏铺满

有时候应用打包后&#xff0c;希望全屏显示;而默认的宽度和高度,是无法满足的;这时需要单独处理; 核心代码 // 1.引入screen对象 import { BrowserWindow, screen } from electron; function createWindow(): void {// 2.获取屏幕尺寸const { width, height } screen.getPrim…

mysql-为什么需要线程池

mysql-为什么需要线程池 MySQL线程池的概述与应用 MySQL线程池是MySQL数据库中的一个重要组件&#xff0c;旨在提高数据库的性能、吞吐量和可伸缩性。它通过管理数据库服务器的线程生命周期&#xff0c;减少了线程的创建和销毁的开销&#xff0c;并通过优化资源使用&#xff…

【接口封装】——10、系统托盘

解释&#xff1a; 1、定义好按钮的状态&#xff1a;创建 map 映射关系&#xff0c;即 一个名字对应一个按钮 2、对不同按钮实现不同的信号槽函数 头文件&#xff1a; #include "SysTrayIcon.h" #include <qwidget.h> #include "define.h" #include &…

Nginx——配置部署域名服务器路由nginx

文章目录 基本配置报错解决只能通过[域名]:[端口]/[API路径]的方式请求 基本配置 user www-data; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /run/nginx.pid;events {worker_connections 1024; }http {include /etc/nginx/mime…

C. Raspberries

time limit per test 2 seconds memory limit per test 256 megabytes You are given an array of integers a1,a2,…,ana1,a2,…,an and a number kk (2≤k≤52≤k≤5). In one operation, you can do the following: Choose an index 1≤i≤n1≤i≤n,Set aiai1aiai1. F…

Flink学习连载文章8--时间语义

Time的分类 (时间语义) EventTime:事件(数据)时间,是事件/数据真真正正发生时/产生时的时间 IngestionTime:摄入时间,是事件/数据到达流处理系统的时间 ProcessingTime:处理时间,是事件/数据被处理/计算时的系统的时间 EventTime的重要性 假设&#xff0c;你正在去往地下停…

sizeof和strlen区分,(好多例子)

sizeof算字节大小 带\0 strlen算字符串长度 \0之前

Simulink的SIL软件在环测试

以基于模型的设计&#xff08;MBD&#xff09;的软件开发时&#xff0c;需要进行SIL&#xff08;软件在环测试&#xff09;。SIL测试就是在PC上验证模型是否与代码功能一致。在项目开展中&#xff0c;用在需要将控制器生成移植到硬件前&#xff0c;把控制器的模块生成代码&…

浅谈js中onmouseleave和onmouseout的区别

同步发布于我的网站 &#x1f680; 背景介绍基本概念区别详解 无子元素的情况有子元素的情况 实际应用场景 使用 onmouseleave使用 onmouseout 注意事项总结 背景介绍 在前端开发中&#xff0c;我们经常需要为元素绑定鼠标事件&#xff0c;以实现各种交互效果。onmouseleave…

【Git系列】利用 Bash 脚本获取 Git 最后一次非合并提交的提交人

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…