全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“
扫描二维码
随时随地手机看文章
摘要:
本文主要介绍了Python中创建自定义类时鸭子类型的基本定义、特点和应用场景,同时列举了“file-like object“的例子对鸭子类型进行了说明。
文档和代码获取:
本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail代码软件对代码进行可视化阅读便于读者理解。
正文:
实际上对于IsSerialConnected函数来说,任何具有RetSerialState方法的对象都可以传入,Python中的这种多态通常称为鸭子类型。
“如果它走像鸭子、游泳像鸭子,那么它就是一只鸭子”。我们不关心它是否真的是一只(继承自)鸭子,只需要知道它可以游泳或走路即可。鹅和天鹅很容易为我们提供鸭子一样的行为,这允许我们在未来的设计中无须为水鸟们指定继承关系就可以创建新的鸟类类型,同时也允许设计人员创建与初衷完全不同行为的类。例如,未来的设计人员可能创建一个会走路和游泳的企鹅类型,它同样适用于同的接口但设计人员完全没有想过将其归类为鸭子。
在鸭子类型中,重点关注的是对象的行为和方法,而不是对象的具体类型或类。如果一个对象具备特定的方法或属性,那么它就可以被视为拥有特定的类型,而不必显式声明或继承该类型。这种方式允许Python在运行时动态确定对象的类型,从而使代码更加灵活和简洁。
Python的“file-like object“就是一种鸭子类型。对真正的文件对象,它有一个read()方法,返回其内容。但是,许多对象,只要有read()方法,都被视为“file-like object“。许多函数接收的参数就是“file-like object“,你不一定要传入真正的文件对象,完全可以传入任何实现了read()方法的对象。





