书中 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-鸭子类型和切片原理相关推荐

  1. python与鸭子类型

    目录 1.面向对象(OOP)的三大特征 2.静态类型语言和动态类型语言的区别 3.面向接口编程 4.鸭子类型 5.python中的多态 1.面向对象(OOP)的三大特征 (1)面向对象程序设计有三大特 ...

  2. Python笔记 · 鸭子类型 / Duck Typing

    1. 问题的由来 我初次意识到鸭子类型的存在是在学习Sklearn时,在<Hands-On Machine Learing>一书的第二章,作者提供了一个自定义的Tansformer,使用自 ...

  3. 啥是Python的鸭子类型

    Python中的鸭子类型(Duck Typing)是一种动态类型机制,它不关注对象的类型,而是关注对象的行为.根据鸭子类型的原理,如果一个对象像鸭子一样走路.游泳.叫,那么就可以认为它是一个鸭子. 换 ...

  4. Python中鸭子类型与多态介绍

    鸭子类型是Python中一种独特的编程方式,指的是一种动态类型的概念(只要一只动物走路像鸭子,叫声像鸭子,那么它就可以被当做鸭子使用). 这意味着在Python中,您可以使用多个不同的类对象来执行相同 ...

  5. Python中布尔类型 短路计算原理

    Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ...

  6. Python 的鸭子类型

    当你看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来像鸭子,那么这只鸟就可以被称为鸭子.     所有的类都实现了一个共同的方法,这些类可以归为一种类型,     同理,如果多个类都实现了一个魔法函数, ...

  7. python之鸭子类型(22)

    # # @File : # @Author: dianxiaoer # @Date : 2019/11/5 # @Desc :# Duck typing 这个概念来源于美国印第安纳州的诗人詹姆斯·惠特 ...

  8. python鸭子类型与协议理解

    鸭子类型 定义 在维基百科中的准确定义是'是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定' 个人理 ...

  9. python鸭子类型_Python的鸭子类型

    '那只东西呱呱的叫,有扁扁的嘴巴,走起路来还外八,对!它就是只鸭子'基本定义 对于熟悉python的开发者来说,相信对于python的鸭子类型比较熟悉,所谓鸭子类型,在维基百科中的准确定义是'是动态类 ...

最新文章

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

热门文章

  1. 这么说IBIS模型,你应该就懂了
  2. 使用IDEA 远程调试功能,服务器代码远程调试
  3. 谈笑间学会大数据-Hive数据类型和文件格式
  4. 关于以太坊ERC-20通证智能合约协议
  5. eNSP 配置简单静态路由 实现全网可达
  6. Windows任务管理器的打开方式
  7. 【CGAL_网格处理】坐标变换
  8. 增长的旋律——AARRR模式思考(二)
  9. Python语法之文件操作思维导图
  10. 计算机英语教学设计反思,小学五年级英语教学设计与反思