课时47:魔法方法:定制序列
目录:
一、定制序列
二、课时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:魔法方法:定制序列相关推荐
- python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)
python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...
- python魔法函数和装饰器_python魔法方法、构造函数、序列与映射、迭代器、生成器...
在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的__init__,魔法方法也就是具有特殊功能的方法. 构造函数 构造函数不同于普通方法,将 ...
- 课时46:魔法方法:描述符(property的原理)
目录: 一.描述符(property的原理) 二.课时46课后习题及答案 ********************************** 一.描述符(property的原理) ********* ...
- 魔法方法:简单定制+习题复习
##简单定制 ※基本要求: -定制一个计时器的类 -start和stop方法代表启动计时和停止计时 -假设计时器对象t1,pr ...
- 刻意练习:Python基础 -- Task11. 魔法方法
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
- python魔法方法和普通方法_Python龙珠训练营九:魔法方法
魔法方法总是被双下划线包围,例如 __init__ . 魔法方法是面向对象的 Python 的一切,如果你不知道魔法方法,说明你还没能意识到面向对象的 Python 的强大. 魔法方法的"魔 ...
- python 类 对象 魔法方法概念+习题
类 对象 类 对象是c++和java中都有的内容,python定义类的简单语法如下: class 类名: -类变量或者方法 Python 的类定义有点像函数定义,都是以冒号:作为类体的开始,以统一缩进 ...
- 阿里云天池 Python训练营Task3: Python基础进阶:从函数到高级魔法方法 学习笔记
本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5 ...
- rect函数_Python基础入门(9):从函数到高级魔法方法--阿里云天池
Day 9 倒数第二天啦! 今天学习 魔法方法 9.1 魔法方法 魔法方法总是被双下划线包围,例如__init__. 魔法方法是面向对象的 Python 的一切,如果你不知道魔法方法,说明你还没能意识 ...
- 《天池龙珠 - Python训练营》03.Python基础进阶:从函数到高级魔法方法
目录 函数 函数的定义 函数的调用 函数文档 函数参数 函数的返回值 变量作用域 Lambda 表达式 匿名函数的定义 匿名函数的应用 类与对象 对象 = 属性 + 方法 self 是什么? Pyth ...
最新文章
- 介绍Python中的__future__模块
- python使用redis队列_【Python】python使用redis做队列服务
- oracle em登陆不了,账户密码过期
- 第三章:3.5 傅里叶变换
- 在SAP中进行黏贴时必须要把之前的数据删掉后才能黏贴,不能直接使用黏贴来覆盖之前的数据,这个怎麼解?
- Tomcat servlet工作原理
- IDEA 创建 SpringCloud项目-多项目方式
- 【渝粤教育】国家开放大学2019年春季 8042-22T养殖业基础 参考试题
- 51单片机对GPS卫星信号的解码并通过LCD1602或12864显示
- 麻瓜python视频教程_麻瓜编程Python Web基础视频教程
- Windebug 专题
- 微信小程序组件之间传值
- Wolfram|Alpha搜索引擎
- 读书印记 - 《星船伞兵》
- 设计出python_《设》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
- 分享一段工具型代码:印章抠图
- 图形外部加文字 r语言_将外部图形卡连接到笔记本电脑的最佳方法
- html 按钮默认值,button_标签 | Elements_HTML_参考手册_非常教程
- 设计模式--builder 模式
- neu坐标系和xyz坐标系转换_航测必知的坐标系详解和转换关系