流畅python学习笔记:第十二章:子类化内置类型
子类化内置类型
在python2.2之后,内置类型都可以子类化,但是有一个注意事项:内置类型不会调用用户定义的类覆盖的特殊方法。这个说起来比较绕口,什么意思呢。我们来看下下面的代码:
class DopperDict(dict):
def __setitem__(self, key, value):
super(DopperDict,self).__setitem__(key,[value]*2) ⑴ if __name__=="__main__":
dd=DopperDict(one=1) ⑵
print dd
dd['two']=2 ⑶
print dd
dd.update(three=3) ⑷
print dd
E:\python2.7.11\python.exe E:/py_prj/fluent_python/chapter12.py
{'one': 1}
{'two': [2, 2], 'one': 1}
{'three': 3, 'two': [2, 2], 'one': 1}
在1中,重写了__setitem__方法,并委托超类进行赋值
在2中,继承自dict的__init__忽略了被覆盖的__setitem__方法,one值并没有重复
在3 中,[]运算符会调用我们覆盖的__setitem__方法,按照预期工作。Two对应的是两个重复的值。
在4中,继承自dict的update方法也不使用我们覆盖的__setitem__方法,three的值没有重复。
这就会导致初始化和赋值的时候得到的结果不一样,那么如何解决呢:
可以使用collections.UserDict模块。
class AnswerDict(dict):
def __getitem__(self, item):
return 42 class DopperDict(collections.UserDict):
def __setitem__(self, key, value):
super(DopperDict,self).__setitem__(key,[value]*2)
在这种情况下,初始化调用覆盖的__setitem__方法。
本章还介绍了关于多重继承的方法。这个在之前的一篇帖子中介绍过。请参考:http://www.cnblogs.com/zhanghongfeng/p/7190732.html
流畅python学习笔记:第十二章:子类化内置类型的更多相关文章
- o'Reill的SVG精髓(第二版)学习笔记——第十二章
第十二章 SVG动画 12.1动画基础 SVG的动画特性基于万维网联盟的“同步多媒体集成语言”(SMIL)规范(http://www.w3.org/TR/SMIL3). 在这个动画系统中,我们可以指定 ...
- 流畅python学习笔记:第十七章:并发处理二
本章讨论python3.2引入的concurrent.futures模块.future是中文名叫期物.期物是一种对象,表示异步执行的操作 在很多任务中,特别是处理网络I/O.需要使用并发,因为网络有很 ...
- 流畅python学习笔记第十八章:使用asyncio包处理并发(二)
前面介绍了asyncio的用法.下面我们来看下如何用协程的方式来实现之前的旋转指针的方法 @asyncio.coroutine def spin(msg): write,flush=sys.stdou ...
- 流畅python学习笔记:第十一章:抽象基类
__getitem__实现可迭代对象.要将一个对象变成一个可迭代的对象,通常都要实现__iter__.但是如果没有__iter__的话,实现了__getitem__也可以实现迭代.我们还是用第一章扑克 ...
- 流畅python学习笔记:第十七章:并发处理
第十七章:并发处理 本章主要讨论Python3引入的concurrent.futures模块.在python2.7中需要用pip install futures来安装.concurrent.futur ...
- Python学习笔记第十二周
目录: 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令事务 索引 创建数据库 外键 增删改查表 权限 python 操作mysql ORM sqla ...
- python学习笔记(十二)之函数
牛刀小试: 定义一个无参函数 >>> def myFirstFunc(): ... print("Hello python") ... print("h ...
- 流畅python学习笔记第十八章:使用asyncio包处理并发(一)
首先是线程与协程的对比.在文中作者通过一个实例分别采用线程实现和asynchio包实现来比较两者的差别.在多线程的样例中,会用到join的方法,下面来介绍下join方法的使用. 知识点一:当一个进程启 ...
- 学习笔记 第十二章 CSS3+HTML5网页排版
第12章 CSS3+HTML5网页排版 [学习重点] 正确使用HTML5结构标签 正确使用HTML5语义元素 能够设计符合标准的网页结构 12.1 使用结构标签 在制作网页时,不仅需要使用< ...
- Python学习笔记第二十二周(前端知识点补充)
目录: 一.伪类 二.样式 1.字体 2.背景图片 3.margin和padding 4.列表属性 5.float 6.clear 7.position 8.text-decoration(a标签下划 ...
随机推荐
- jcraft--SFTP demo
import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import ...
- js 日期计算星座 根据生日的月份和日期,一行代码计算星座的js小函数(转)
本博客根据 开源中国作者清风徐不来 的文章 根据生日的月份和日期,一行代码计算星座的js小函数(转) 原文出自CSDN 无心的专栏 的文章,知识产权归原文作者所有! 点击查看原文:js 日期计算星座
- php+mysql两次左外联跨表查询
代码如下: $querySel="select * from roomsy rsy left join room ro on rsy.RoomID=ro.ID left join hotel ...
- ylb: 数据库备份(Backup)和还原(Restore)
ylbtech-SQL Server:SQL Server- 数据库备份(Backup)和还原(Restore) -- ======================================== ...
- 七天学会ASP.NET MVC (四)——用户授权认证问题 【转】
http://www.cnblogs.com/powertoolsteam/p/MVC_four.html 小编应各位的要求,快马加鞭,马不停蹄的终于:七天学会 Asp.Net MVC 第四篇出炉,在 ...
- ElasticSearch搜索term和terms的区别
今天同事使用ES查询印地语的文章.发现查询报错,查询语句和错误信息如下: 查询语句:{ "query":{ "bool":{ ...
- POJ 3181 Dollar Dayz(全然背包+简单高精度加法)
POJ 3181 Dollar Dayz(全然背包+简单高精度加法) id=3181">http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币各自 ...
- linux暴力密码破解工具hydra安装与使用
说明:hydra是著名黑客组织thc的一款开源的暴力密码破解工具,可以在线破解多种密码.官网:http://www.thc.org/thc-hydra,可支持AFP, Cisco AAA, Cisco ...
- Android开发有用的三方网站
聚合数据-免费数据调用 https://www.juhe.cn/ 有赞- 免费的微商城 http://youzan.com/ 秀米微信图文编辑器 http://xiumi.us/ 禅道项目管理软件 h ...
- java将一个或者多个空格进行分割
public static void main(String[] args) { String s = "GET /index.html HTTP/1.1";//字符串s由“GET ...