目录:
  一、定制序列

  二、课时47课后习题及答案

****************

一、定制序列

****************

本节要谈的是定制容器,要想成功的实现容器的定制,便需要先谈一谈协议。协议是什么?

协议(Protocols)与其他编程语言中的接口很相似,它规定你哪些方法必须要定义。然而,在Python中的协议就显得不那么正式。事实上,在Python中,协议更像是一种指南。

这有点像Python极力推崇的鸭子类型【扩展阅读】鸭子类型(duck typing)

在Python中,像序列类型(如列表、元组、字符串)或映射类型(如字典)都是属于容器类型。本节来讲定制容器,那就必须先知道,定制容器有关的一些协议。

  • 如果说你希望定制的容器是不可变的话,你只需要定义__len__()和__getitem__()方法。
  • 如果你希望定制的容器是可变的话,除了__len__()和__getitem__()方法,你还需要定义__setitem__()和__delitem__()两个方法。

下表列举了定制容器类型相关的魔法方法及定义。

__len__(self)                      定义当被 len() 调用时的行为(返回容器中元素的个数)
__getitem__(self, key)                 定义获取容器中指定元素的行为,相当于 self[key]
__setitem__(self, key, value)          定义设置容器中指定元素的行为,相当于 self[key] = value
__delitem__(self, key)                 定义删除容器中指定元素的行为,相当于 del self[key]
__iter__(self)                         定义当迭代容器中的元素的行为
__reversed__(self)                     定义当被 reversed() 调用时的行为
__contains__(self, item)               定义当使用成员测试运算符(in 或 not in)时的行为

举个例子:编写一个不可改变的自定义列表,要求记录列表中每个元素被访问的次数。

class CountList:def __init__(self, *args):self.values = [x for x in args]self.count = {}.fromkeys(range(len(self.values)), 0)#这里使用列表的下标作为字典的键,注意不能用元素作为字典的键#因为列表的不同下标可能有值一样的元素,但字典不能有两个相同的键def __len__(self):return len(self.values)def __getitem__(self, key):self.count[key] += 1return self.values[key]

>>> c1 = CountList(1,3,5,7,9)
>>> c2 = CountList(2,4,6,8,10)
>>> c1[1]
3
>>> c2[1]
4
>>> c1[1] + c2[1]
7
>>> c1.count
{0: 0, 1: 2, 2: 0, 3: 0, 4: 0}
>>> c2.count
{0: 0, 1: 2, 2: 0, 3: 0, 4: 0}

*******************************

二、课时47课后习题及答案

*******************************

转载于:https://www.cnblogs.com/DC0307/p/9538135.html

课时47:魔法方法:定制序列相关推荐

  1. python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)

    python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...

  2. python魔法函数和装饰器_python魔法方法、构造函数、序列与映射、迭代器、生成器...

    在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的__init__,魔法方法也就是具有特殊功能的方法. 构造函数 构造函数不同于普通方法,将 ...

  3. 课时46:魔法方法:描述符(property的原理)

    目录: 一.描述符(property的原理) 二.课时46课后习题及答案 ********************************** 一.描述符(property的原理) ********* ...

  4. 魔法方法:简单定制+习题复习

    ##简单定制        ※基本要求:           -定制一个计时器的类           -start和stop方法代表启动计时和停止计时           -假设计时器对象t1,pr ...

  5. 刻意练习:Python基础 -- Task11. 魔法方法

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  6. python魔法方法和普通方法_Python龙珠训练营九:魔法方法

    魔法方法总是被双下划线包围,例如 __init__ . 魔法方法是面向对象的 Python 的一切,如果你不知道魔法方法,说明你还没能意识到面向对象的 Python 的强大. 魔法方法的"魔 ...

  7. python 类 对象 魔法方法概念+习题

    类 对象 类 对象是c++和java中都有的内容,python定义类的简单语法如下: class 类名: -类变量或者方法 Python 的类定义有点像函数定义,都是以冒号:作为类体的开始,以统一缩进 ...

  8. 阿里云天池 Python训练营Task3: Python基础进阶:从函数到高级魔法方法 学习笔记

    本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5 ...

  9. rect函数_Python基础入门(9):从函数到高级魔法方法--阿里云天池

    Day 9 倒数第二天啦! 今天学习 魔法方法 9.1 魔法方法 魔法方法总是被双下划线包围,例如__init__. 魔法方法是面向对象的 Python 的一切,如果你不知道魔法方法,说明你还没能意识 ...

  10. 《天池龙珠 - Python训练营》03.Python基础进阶:从函数到高级魔法方法

    目录 函数 函数的定义 函数的调用 函数文档 函数参数 函数的返回值 变量作用域 Lambda 表达式 匿名函数的定义 匿名函数的应用 类与对象 对象 = 属性 + 方法 self 是什么? Pyth ...

最新文章

  1. 介绍Python中的__future__模块
  2. python使用redis队列_【Python】python使用redis做队列服务
  3. oracle em登陆不了,账户密码过期
  4. 第三章:3.5 傅里叶变换
  5. 在SAP中进行黏贴时必须要把之前的数据删掉后才能黏贴,不能直接使用黏贴来覆盖之前的数据,这个怎麼解?
  6. Tomcat servlet工作原理
  7. IDEA 创建 SpringCloud项目-多项目方式
  8. 【渝粤教育】国家开放大学2019年春季 8042-22T养殖业基础 参考试题
  9. 51单片机对GPS卫星信号的解码并通过LCD1602或12864显示
  10. 麻瓜python视频教程_麻瓜编程Python Web基础视频教程
  11. Windebug 专题
  12. 微信小程序组件之间传值
  13. Wolfram|Alpha搜索引擎
  14. 读书印记 - 《星船伞兵》
  15. 设计出python_《设》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
  16. 分享一段工具型代码:印章抠图
  17. 图形外部加文字 r语言_将外部图形卡连接到笔记本电脑的最佳方法
  18. html 按钮默认值,button_标签 | Elements_HTML_参考手册_非常教程
  19. 设计模式--builder 模式
  20. neu坐标系和xyz坐标系转换_航测必知的坐标系详解和转换关系

热门文章

  1. R语言构建层次分析模型不看一下吗~
  2. 银行剧震!国内第一家无人银行来了...
  3. VI 编辑器保存命令
  4. 是时候拥有一个你自己的命令行工具了
  5. 修改上传文件大小限制(LNMP/wamp环境)
  6. 小程序对实体行业转型有何影响?
  7. 实现Windows访问Linux文件系统
  8. 奇盾安防监控视频恢复案例
  9. UI自动化学习过程get的知识点
  10. 爬虫库之BeautifulSoup学习(三)