一个继承Python内建结构的坑儿。从Python 2.2开始,Python支持继承Python内建结构,如list、dict。为了简化项目内容,直接继承了dict,但是结果和预期不一样。现在来好好研究研究:

举个例子:In : class NewDict(dict):

...:     def __getitem__(self, key):

...:         return 42

...:

In : d = NewDict(a=1)

In : d

Out: {'a': 42}

In : d2 = {}

In : d2.update(d)

In : d2

Out: {'a': 1}

也就是说NewDict的__getitem__方法被dict.update给忽略了。In : from UserDict import UserDict

In : class NewDict(UserDict):

...:     def __getitem__(self, key):

...:         return 42

...:

In : d = NewDict(a=1)

In : d['b'] =2

In : d

Out: {'a': 1, 'b': 2}

In : d['b']

Out: 42

In : d2 = {}

In : d2.update(d)

In : d2

Out: {'a': 42, 'b': 42}

这才是对的呀。

后来在PyPy的文档中发现了原因,也就是这种C实现的结构的内建方法大部分会忽略重载的那个方法。

之前以为UserDict这样的类是历史遗留问题,现在才知道是有原因的。原来UserDict、UserString、UserList这样的模块是非常必要的。

python的userlist_Python中UserDict、UserString、UserList有用吗?相关推荐

  1. Python中 5个非常有用的单行代码

    Python中 5个非常有用的单行代码 1. 什么是单行代码? 2. 了解和使用单行代码的好处 3. 5个单行代码示例 参考 作为开发人员,你想提高生产力吗?掌握这 5 个 Python 一行代码,你 ...

  2. 从15000个Python开源项目中精选的Top30,Github平均star为3707,赶紧收藏!

    翻译 | AI科技大本营(ID:rgznai100) 参与 | SuiSui 继推出2017年机器学习开源项目Top 30榜单后,Mybridge AI又推出了一个Python开源项目Top 30榜单 ...

  3. 收藏!15000个Python开源项目中精选Top30!

    来源:授权自AI科技大本营(ID:rgznai100) 本文长度为1700字,建议阅读6分钟 本文基于项目质量.用户参与度以及其他因素为你列出Python开源项目Top 30,建议收藏. 继推出201 ...

  4. python定义类()中写object和不写的区别

    python定义类()中写object和不写的区别 这里需要说明一下: python3中,类定义默认继承object,所以写不写没有区别 但在python2中,并不是这样 所以此内容是针对python ...

  5. python读取文件中的数据为二维数组变量_Numpy 多维数据数组的实现

    numpy包(模块)几乎总是用于Python中的数值计算.这个软件包为Python提供了高性能的向量.矩阵.张量数据类型.它是在C和Fortran中创建的,因此当计算被矢量化(用矩阵和矢量表示操作)时 ...

  6. 实际上,Python 3.3中新的“ yield from”语法的主要用途是什么?

    本文翻译自:In practice, what are the main uses for the new "yield from" syntax in Python 3.3? I ...

  7. python文件读取输出-Python 读写文件中数据

    1 需求 在文件 h264.txt 中的数据如图1,读入该文件中的数据,然后将第1列的地址删除,然后将数据输出到h264_out.txt中: 图1 h264.txt 数据截图 图2 输出文件 h264 ...

  8. python人工智能-Python在人工智能中的作用

    原标题:Python在人工智能中的作用 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 谷歌的AI击败了一位围棋大师,是一种衡量人工智能突然的快速发展的方 ...

  9. python args kwargs_Python中的args和kwargs

    有时,你会看到python中定义函数的时候带有两个奇怪的参数:*args.**kwargs.如果你曾经想知道它们是干什么的,或者想知道你的IDE为什么在main()函数中定义它们,那么本文可以帮助到你 ...

最新文章

  1. RNA-seq【分析记录】
  2. php 带下划线的函数,[宜配屋]听图阁
  3. 一口气拿了9家公司的offer,年薪50W
  4. HTML学习笔记(三)样式CSS
  5. 线程的几种状态_拜托:不要再问我线程有多少种状态了
  6. java finally的作用_java中finally关键字的特点和作用是什么
  7. ASP.NET 2.0运行时简要分析
  8. Spark _13_二次排序问题
  9. Netty私有栈协议
  10. classcastexception异常_Java程序员必备:异常的十个关键知识点
  11. 计算机cpu图片,电脑处理器天梯图2019
  12. python单位根检验看结果_时间序列的ADF检验(单位根检验)
  13. 直播带货系统的六大热门功能模块概述
  14. 1007 Problem H A+B 输入输出练习VIII
  15. QT应用编程: 域名解析(域名转IP)
  16. freeswitch如何判断挂机方
  17. Nginx关闭后,网页仍能访问(缓存问题)
  18. 2、ThreadX 操作系统
  19. Java运算符(1)
  20. 深度学习笔记(三):BatchNorm(BN)层

热门文章

  1. 在div中显示html_HTML基础知识之DIV
  2. Qt学习笔记之2D绘图
  3. 关于Verilog的可综合性
  4. 在ZC702上运行Linux(4)-编译和使用U-Boot Linux
  5. 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA
  6. 移除单链表的倒数第N个节点
  7. 记Booking.com iOS开发岗位线上笔试
  8. Javascript基础系列之(五)条件语句(比较操作符)
  9. C++宏定义中#与##的妙用
  10. href=#与javascript:void(0)的区别