书中 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. python爬取多页_Python 爬虫 2 爬取多页网页
  2. WebKit 内核源码分析 (二) FrameLoader
  3. logistic regression及其Python实现
  4. 先装ubuntu后装windows时遇到的问题的解决办法
  5. lingo姜启源数学模型接力队选拔问题实现实例
  6. AutoCAD 天正建筑2014安装破解
  7. 解决Safari使用谷歌搜索引擎需要二次确认
  8. Python openpyxl 删除excel有删除线的文字
  9. stata陈强:计量经济学及stata应用_陈强 第四章 一元线性回归
  10. libVLC库下载及测试
  11. C++Eigen库矩阵常见操作
  12. 如何去学习PMP考试的《PMBOK》
  13. 线性代数-克莱姆法则
  14. linux rt patch 强实时,Linux RT(2)-硬实时Linux(RT-Preempt Patch)的中断线程化
  15. 历史回顾——中国各省省名之由来
  16. 【Tips】史上最全H1B问题合辑——保持H1B身份终级篇
  17. Hanselminutes播客242-与Pete Brown的远程工作者的困境
  18. 飞信免费发短信API
  19. python 如何将JSON数据原封不动的转为字符串(顺序不能变动)?
  20. Win10图片打开很慢如何改回Win7的图片查看器打开?

热门文章

  1. c语言姓名如何定义,c语言如何输入编号和姓名
  2. 中层管理者,你到底该管理什么?
  3. python股票网格交易_不知道哪位交易员可以解释下网格交易法?
  4. 如何在 Linux 中创建并运行 Shell 脚本(Bash 初学者教程)
  5. html中怎样变单独英文月份,【Web前端问题】js中,如何将日期中的月份转化为英文显示?...
  6. 英语日常用语900句(5)
  7. wincc报表日报表实例_wincc 报表,涉及变量计算的日报表怎么做
  8. 强化学习 蒲丰投针实验 蒙特卡洛算法
  9. iphone连接linux系统电脑,为什么iphone连不上电脑 多种解决方法【图文教程】
  10. 某验通杀js版,流程各个验证码那对应的js分析,你确定不进来看看(无感)?