《流畅的Python》6-鸭子类型和切片原理
书中 9-10 章用实现一个Vector类
来了解一个类的运行和实现过程,作者实现的细节非常值得一看,这里就不搬运了,讲一下序列中切片的原理。
- 鸭子类型
- 切片原理
鸭子类型
在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由”当前方法和属性的集合”决定。
通俗来讲,“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”。很像一句老话,“视其所以,观其所由,察其所安”,当然含义完全不一样。具体检查从想要它做什么行为入手,设计也从这个思想去做。
Python中创建任意完整的序列如Vector
都无需使用继承,只需要实现符合序列协议的方法。这里呢,协议其实就是非正式的接口,定义在文档里,换言之,想要实现切片,把 __len__
和 __getitem__
两个方法实现就行,这两个就是接口。
切片原理
一个简单的序列(没有切片):
class FrenchDeck:# ...def __init__(self):self._cards=[Card(rank,suit)for suit in self.suits for rank in self.ranks]def __len__(self):return len(self._cards)def __getitem__(self,position):return .self._cards[position]
实现切片之前,观察切片有什么行为。
对Vector
实现切片:
def __getitem__(self,index):cls=type(self)if isinstance(index,slice):return cls(self._components[index])elif isinstance(index,numbers.Integral):return self._components[index]else :msg='{cls.__name__} indices must be integers'raise TypeError(msg.format(cls=cls))
《流畅的Python》6-鸭子类型和切片原理相关推荐
- python与鸭子类型
目录 1.面向对象(OOP)的三大特征 2.静态类型语言和动态类型语言的区别 3.面向接口编程 4.鸭子类型 5.python中的多态 1.面向对象(OOP)的三大特征 (1)面向对象程序设计有三大特 ...
- Python笔记 · 鸭子类型 / Duck Typing
1. 问题的由来 我初次意识到鸭子类型的存在是在学习Sklearn时,在<Hands-On Machine Learing>一书的第二章,作者提供了一个自定义的Tansformer,使用自 ...
- 啥是Python的鸭子类型
Python中的鸭子类型(Duck Typing)是一种动态类型机制,它不关注对象的类型,而是关注对象的行为.根据鸭子类型的原理,如果一个对象像鸭子一样走路.游泳.叫,那么就可以认为它是一个鸭子. 换 ...
- Python中鸭子类型与多态介绍
鸭子类型是Python中一种独特的编程方式,指的是一种动态类型的概念(只要一只动物走路像鸭子,叫声像鸭子,那么它就可以被当做鸭子使用). 这意味着在Python中,您可以使用多个不同的类对象来执行相同 ...
- Python中布尔类型 短路计算原理
Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ...
- Python 的鸭子类型
当你看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来像鸭子,那么这只鸟就可以被称为鸭子. 所有的类都实现了一个共同的方法,这些类可以归为一种类型, 同理,如果多个类都实现了一个魔法函数, ...
- python之鸭子类型(22)
# # @File : # @Author: dianxiaoer # @Date : 2019/11/5 # @Desc :# Duck typing 这个概念来源于美国印第安纳州的诗人詹姆斯·惠特 ...
- python鸭子类型与协议理解
鸭子类型 定义 在维基百科中的准确定义是'是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定' 个人理 ...
- python鸭子类型_Python的鸭子类型
'那只东西呱呱的叫,有扁扁的嘴巴,走起路来还外八,对!它就是只鸭子'基本定义 对于熟悉python的开发者来说,相信对于python的鸭子类型比较熟悉,所谓鸭子类型,在维基百科中的准确定义是'是动态类 ...
最新文章
- python爬取多页_Python 爬虫 2 爬取多页网页
- WebKit 内核源码分析 (二) FrameLoader
- logistic regression及其Python实现
- 先装ubuntu后装windows时遇到的问题的解决办法
- lingo姜启源数学模型接力队选拔问题实现实例
- AutoCAD 天正建筑2014安装破解
- 解决Safari使用谷歌搜索引擎需要二次确认
- Python openpyxl 删除excel有删除线的文字
- stata陈强:计量经济学及stata应用_陈强 第四章 一元线性回归
- libVLC库下载及测试
- C++Eigen库矩阵常见操作
- 如何去学习PMP考试的《PMBOK》
- 线性代数-克莱姆法则
- linux rt patch 强实时,Linux RT(2)-硬实时Linux(RT-Preempt Patch)的中断线程化
- 历史回顾——中国各省省名之由来
- 【Tips】史上最全H1B问题合辑——保持H1B身份终级篇
- Hanselminutes播客242-与Pete Brown的远程工作者的困境
- 飞信免费发短信API
- python 如何将JSON数据原封不动的转为字符串(顺序不能变动)?
- Win10图片打开很慢如何改回Win7的图片查看器打开?
热门文章
- c语言姓名如何定义,c语言如何输入编号和姓名
- 中层管理者,你到底该管理什么?
- python股票网格交易_不知道哪位交易员可以解释下网格交易法?
- 如何在 Linux 中创建并运行 Shell 脚本(Bash 初学者教程)
- html中怎样变单独英文月份,【Web前端问题】js中,如何将日期中的月份转化为英文显示?...
- 英语日常用语900句(5)
- wincc报表日报表实例_wincc 报表,涉及变量计算的日报表怎么做
- 强化学习 蒲丰投针实验 蒙特卡洛算法
- iphone连接linux系统电脑,为什么iphone连不上电脑 多种解决方法【图文教程】
- 某验通杀js版,流程各个验证码那对应的js分析,你确定不进来看看(无感)?