1. 如果想实现与某个内置类型具有类似行为的类时,最好的方法就是将这个内置类型子类化。

2. 内置类型子类化,其实就是自定义一个新类,使其继承有类似行为的内置类,通过重定义这个新类实现指定的功能。

class newDictError(ValueError):
'''如果向newDict添加重复值,则引发此异常''' class newDict(dict):
'''不接受重复值的字典'''
def __setitem__(self, key, value):
if value in self.values():
if((key in self and self[key] != value) or (key not in self)):
raise newDictError("这个值已经存在,并对应不同的键")
super().__setitem__(key, value)
demoDict = newDict()
demoDict['key'] = 'value'
demoDict['other_key'] = 'value2'
print(demoDict)
demoDict['other_key'] = 'value'
print(demoDict)
{'key': 'value', 'other_key': 'value2'}
Traceback (most recent call last): File "C:/Users/24724/.spyder-py3/temp.py", line 15, in <module>
demoDict['other_key'] = 'value' File "C:/Users/24724/.spyder-py3/temp.py", line 9, in __setitem__
raise newDictError("这个值已经存在,并对应不同的键") newDictError: 这个值已经存在,并对应不同的键

其实很多类都是对python内置类的部分实现,它们作为子类的速度更快,代码更整洁。

对list进行子类化,实例代码如下:

class myList(list):
def __init__(self, name):
self.name = name
def dir(self, nesting = 0):
offset = " " * nesting
print("%s%s" % (offset, self.name)) for element in self:
if hasattr(element, 'dir'):
element.dir(nesting + 1)
else:
print("%s%s" % (offset, element))
demoList = myList('三打白骨精')
demoList.append('真假孙悟空')
print(demoList.dir())
三打白骨精
真假孙悟空
None

最新文章

  1. myeclipse环境下开发freemarker
  2. GCHandler的使用
  3. 【JAVA多线程安全问题解析】
  4. [原]AppPoolService-IIS应用程序池辅助类(C#控制应用程序池操作)
  5. CSS深入研究:display的恐怖故事解密(2) - table-cell(转)
  6. bzoj1563
  7. [日历] C#修改CNDate日历帮助类 (转载)
  8. SpringMVC加载.roperties文件属性值的方法?
  9. Java DecimalFormat 用法
  10. Qt5模块简介
  11. 通过一篇YAML来学习YAML
  12. CF 1051F
  13. Spring中的CharacterEncodingFilter
  14. Linux - 查看命令所属的软件包
  15. Java的Properties类使用
  16. L260
  17. Web jsp开发学习——新建一个项目
  18. PHP 友好的dump
  19. isset() 与 array_key_exists() 比较
  20. Python列表切片详解([][:][::])

热门文章

  1. linux 内核协助的探测
  2. 北京信息科技大学第十一届程序设计竞赛E-- kotori和素因子(深搜)
  3. koa2入门--03.koa中间件以及中间件执行流程
  4. The Zen of Python —— Python 之禅
  5. 【Kubernetes】创建Pod并分配到指定节点
  6. Qt串行化的输入和输出(使用QDataStream读写QByteArray,对QIODevice直接起作用)
  7. mysql 时间函数总结
  8. Java8 LocalDate计算两个日期的间隔天数
  9. springBoot 集成redis客户端傻瓜式流程
  10. Win10系统中搭建服务器的方法