全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“

python,file,like,object · 浏览次数 : 6

小编点评

本文主要介绍了 Python 中面向对象编程(OOP)的基础知识,特别是鸭子类型和“file-like object“的使用。以下是文章的主要内容: 1. **面向对象编程简介**:文章首先介绍了面向对象编程的基本概念,包括类和对象的概念,以及如何在 Python 中实现它们。 2. **鸭子类型**:接着,文章详细解释了鸭子类型,这是一种动态类型的语言特性,它不要求对象具有特定的类,而是关注对象的行为。文章通过实例展示了如何使用鸭子类型来定义类,并强调了它在灵活性和简洁性方面的优势。 3. **file-like object**:文章还讨论了“file-like object“的概念,这是一种抽象的数据类型,用于表示可以像文件一样操作的流。任何实现了 `read()` 方法的对象都可以被视为 file-like object,即使它本身并不是一个文件。 4. **实战案例**:最后,文章通过一个实际的例子——检查设备是否联网——来展示如何在实际编程中使用鸭子类型和 file-like object。 总的来说,文章通过详细的步骤和实例,为读者提供了一份全面的 Python 面向对象编程入门指南,特别是针对那些希望深入了解鸭子类型和 file-like object 的读者。

正文

全网最适合入门的面向对象编程教程:17 类和对象的 Python 实现-鸭子类型与“file-like object“

摘要:

本文主要介绍了 Python 中创建自定义类时鸭子类型的基本定义、特点和应用场景,同时列举了“file-like object“ 的例子对鸭子类型进行了说明。

原文链接:

FreakStudio的博客

往期推荐:

学嵌入式的你,还不会面向对象??!

全网最适合入门的面向对象编程教程:00 面向对象设计方法导论

全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念

全网最适合入门的面向对象编程教程:02 类和对象的 Python 实现-使用 Python 创建类

全网最适合入门的面向对象编程教程:03 类和对象的 Python 实现-为自定义类添加属性

全网最适合入门的面向对象编程教程:04 类和对象的Python实现-为自定义类添加方法

全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签

全网最适合入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装

全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解

全网最适合入门的面向对象编程教程:08 类和对象的Python实现-@property装饰器

全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系

全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则

全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法

全网最适合入门的面向对象编程教程:12 类和对象的Python实现-Python使用logging模块输出程序运行日志

全网最适合入门的面向对象编程教程:13 类和对象的Python实现-可视化阅读代码神器Sourcetrail的安装使用

全网最适合入门的面向对象编程教程:全网最适合入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法

全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法

全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则

更多精彩内容可看:

给你的 Python 加加速:一文速通 Python 并行计算

一文搞懂 CM3 单片机调试原理

肝了半个月,嵌入式技术栈大汇总出炉

电子计算机类比赛的“武林秘籍”

一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库

文档和代码获取:

可访问如下链接进行对文档下载:

https://github.com/leezisheng/Doc

image

本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。

相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo

正文

实际上对于 IsSerialConnected 函数来说,任何具有 RetSerialState 方法的对象都可以传入,Python 中的这种多态通常称为鸭子类型

image

“如果它走像鸭子、游泳像鸭子,那么它就是一只鸭子”。我们不关心它是否真的是一只(继承自)鸭子,只需要知道它可以游泳或走路即可。鹅和天鹅很容易为我们提供鸭子一样的行为,这允许我们在未来的设计中无须为水鸟们指定继承关系就可以创建新的鸟类类型,同时也允许设计人员创建与初衷完全不同行为的类。例如,未来的设计人员可能创建一个会走路和游泳的企鹅类型,它同样适用于相同的接口但设计人员完全没有想过将其归类为鸭子

在鸭子类型中,重点关注的是对象的行为和方法,而不是对象的具体类型或类。如果一个对象具备特定的方法或属性,那么它就可以被视为拥有特定的类型,而不必显式声明或继承该类型。这种方式允许 Python 在运行时动态确定对象的类型,从而使代码更加灵活和简洁。

Python 的“file-like object“就是一种鸭子类型。对真正的文件对象,它有一个 read()方法,返回其内容。但是,许多对象,只要有 read()方法,都被视为“file-like object“。许多函数接收的参数就是“file-like object“,你不一定要传入真正的文件对象,完全可以传入任何实现了 read()方法的对象。

image

与全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“相似的内容:

全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“

本文主要介绍了Python中创建自定义类时鸭子类型的基本定义、特点和应用场景,同时列举了“file-like object“的例子对鸭子类型进行了说明。

全网最适合入门的面向对象编程教程:20 类和对象的 Python 实现-组合关系的实现与 CSV 文件保存

本文主要介绍了在使用Python面向对象编程时,如何实现组合关系,同时对比了组合关系和继承关系的优缺点,并讲解了如何通过csv模块来保存Python接收/生成的数据。

全网最适合入门的面向对象编程教程:18 类和对象的 Python 实现-多重继承与 PyQtGraph 串口数据绘制曲线图

本文主要介绍了Python中创建自定义类时如何使用多重继承、菱形继承的概念和易错点,同时讲解了如何使用PyQtGraph库对串口接收的数据进行绘图。

开源低代码框架 ReZero API 正式版本发布 ,界面操作直接生成API

一、ReZero简介 ReZero是一款.NET中间件 : 全网唯一界面操作就能生成API , 可以集成到任何.NET6+ API项目,无破坏性,也可让非.NET用户使用exe文件 免费开源:MIT最宽松协议 , 一直从事开源事业十年,一直坚持开源 1.1 纯ReZero开发 适合.Net Core

大模型高效微调-LoRA原理详解和训练过程深入分析

博客首发于我的知乎,详见:https://zhuanlan.zhihu.com/p/702629428 一、LoRA原理 LoRA(Low-Rank Adaptation of LLMs),即LLMs的低秩适应,是参数高效微调最常用的方法。 LoRA的本质就是用更少的训练参数来近似LLM全参数微调所

Chrome浏览器不同版本兼容性的验证方法

Chrome浏览器不同版本兼容性的验证方法 背景 上周客户现场有出现使用国产信创设备上面的奇安信浏览器出现兼容性的问题. 开发认为是测试不全面导致. 认为测试应该必须测试过特定浏览器才可以进行说明. 最开始国产设备上面仅能够支持firefox52.3ESR的版本 当时在进行银河麒麟和UOS的兼容适配

Java-全网最详细数据结构

数构&算法:数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关,以下是各种数据结构的详细说明。 线性结构:数组、队列、链表、栈 顺序存储(

[转帖]Skip List--跳表(全网最详细的跳表文章没有之一)

https://www.jianshu.com/p/9d8296562806 跳表是一种神奇的数据结构,因为几乎所有版本的大学本科教材上都没有跳表这种数据结构,而且神书《算法导论》、《算法第四版》这两本书中也没有介绍跳表。但是跳表插入、删除、查找元素的时间复杂度跟红黑树都是一样量级的,时间复杂度都是

算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化

​ 大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 215/10000 为模型找到最好的超参数是机器学习实践中最困难的部分之一 1. 超参数调优的基本概念 机器学习模型中的参数通常分为两类:模型参数和超参数。模型参数是模型通过训

算法金 | 我最常用的两个数据可视化软件,强烈推荐

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 预警:今天文章的描述可能会让你有点别扭;如感到不适,请及时停止 在我行走江湖的行囊中,有两件利器,tableau与matplotlib,它们足以让我应对各种数据可视化的较