《流畅的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的鸭子类型比较熟悉,所谓鸭子类型,在维基百科中的准确定义是'是动态类 ...
最新文章
- NASM汇编helloworld图解
- java求职面试_Java面试求职
- HttpComponents分析之连接池实现
- 页面的加载与渲染顺序
- visionpro 窗口显示文字
- dell设置从ssd启动_工程师笔记︱趁降价采购了一批SSD,结果管理上遇到了问题?...
- HDU10月月赛总结
- 409.最长回文串(力扣leetcode) 博主可答疑该问题
- Python拓展应用——Selenium代刷问卷星问卷,升级版。
- cai计算机辅助教程,拓展:计算机辅助教学(CAI)的基本模式
- windows kafka安装
- html模糊遮罩层磨砂玻璃,常见的PPT背景:如何设计PPT背景?
- Fatal error: Out of memory (allocated 2252140544) (tried to allocate 67108864 bytes)
- Unit 3-Lecture 5: The Pigeonhole Principle and Inclusion-Exclusion
- 4567: [Scoi2016]背单词 trie+贪心
- 商业方向的大数据专业_工业大数据应用的三大挑战和五大商业趋势
- 个推平台API使用经验
- 服务器的型号规格,云服务器规格型号
- php去除换行(回车换行)的三种方法
- MIMIC-III数据集介绍