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

news/2024/11/16 22:26:38/文章来源:https://www.cnblogs.com/FreakEmbedded/p/18304360

全网最适合入门的面向对象编程教程: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

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

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

相关文章

【C++】使用ort推理yolov10

【C++】使用ort推理yolov10 前言:由于笔者是编导专业,想玩玩yolo模型,搜来搜去全是python,所以在学会之后写一篇文章帮助和笔者同样情况的人 环境 Windows 10 C++17 onnxruntime18.1(DML版本) opencv4.9 visual studio2022 1. 环境配置 1.1 OpenCV环境配置 1.1.1 OpenCV …

使用FModel提取游戏资产

介绍使用FModel提取游戏资产的过程目录前言FModel简介FModel安装FModel使用初次使用资产预览资产导出附录dumperDumper-7生成usmap文件向游戏中注入dll 前言 这篇文章仅记录我作为初学者使用FModel工具提取某款游戏模型的过程。 FModel简介 FModel是一个开源软件,可以用于查看…

Codeforces Round 957 (Div. 3) 伤心的day少写一点

表白失败被拒绝了,但我觉得比留有遗憾更强👍,我从来没有自己是小丑的自卑,只会有接下来继续向前的勇气。 A. Only Pluses---------------------------------------------------题解--------------------------------------------- 挺愚蠢的一个题,进行555的暴力运算然后取…

k8s资源清单

目录一、k8s中的资源1、集群资源分类2、什么是资源3、集群资源概述3.1、名称空间级别3.2、集群级资源3.3、元数据型资源二、查看资源清单属性1、查看资源有那些资源清单属性1.1、格式1.2、示例1.2.1、查看pod资源的资源清单属性1.2.2、查看pvc资源的资源清单属性1.2.3、查看sta…

CORS跨域问题梳理

什么是跨域浏览器的同源策略:浏览器为确保资源安全,而遵循的一种策略,该策略对访问资源进行了一些限制 https://www.w3.org/Security/wiki/Same_Origin_Policy https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS1、发生跨域后会出现的问题:1、限制DOM访问 <!-- &…

linux/unix/windows 查询服务器查询出口 ip

1. 使用 curl 命令 比如下面这个 curl cip.cc 2. 也可以在浏览器中直接输入 url 地址:http://www.cip.cc/ 3. 其他的类似的网址: https://ipinfo.io/ curl ipinfo.iohttps://ifconfig.me/ curl ifconfig.mehttps://ifconfig.io/ curl ifconfig.iohttps://icanhazip.com/ cu…

五、Python函数之基础

全局变量与局部变量 顶头,没有任何缩进就是全局变量 函数里的变量是局部变量 如果在函数里使用 global全局变量,则可以改变全局变量。 如果没有global全局变量,调用全局变量的时候,只能读取,无法重新赋值 nonlocal 取上一级变量 书写规范 全局变量大写 局部变量小写 递归函…

STM32时钟体系、SetSysClock、PLL、时钟源

简要介绍了一、时钟体系 1、参考手册 2、时钟源3种 3、时钟树 4.时钟详解 HSE时钟 HSI时钟 锁相环时钟 系统时钟 HCLK时钟 PCLK1时钟 PCLK2时钟 RTC时钟 独立看门狗时钟: 12S时钟: 以太网PHY时钟: USBPHY时钟: MCO时钟输出 系统时钟配置函数SetsysClockO 系统时钟配置流程 …

YApi可视化接口管理平台部署

使用我们提供的 yapi-cli 工具,部署 YApi 平台是非常容易的。执行 yapi server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输…

八大作业管理流程

安全影响力的小编非常喜欢王老师的风格,抄了他的创意,把八大高危作业做了一个“一图看懂”系列。

玄机-第一章 应急响应-webshell查杀

作者是个垃圾,第一次玩玄机太紧张了,不知道flag是啥样找了半天,第二次开靶机多次尝试才知道格式。争取下次一次过。 靶机账号密码 root xjwebshell 1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx} 2.黑客使用的什么工具的shell github地址的md5 flag{md5} 3.黑客…

WordPress标签如何实现批量自定义链接

网站外链和内链都是非常重要的一项 SEO 工作,并且一个网站的反链建设也并非一朝一夕就能够做好,而是日积月累的增加才会更有优化效果,且不论是否为 nofollow 或者 dofollow 属性,对于很 SEOer 来说可能觉得建设 Do Follow 的反链更有用,但是我们不妨换个 SEO 思维方式,一…