python高级编程之(类级):子类内建类型
# -*- coding: utf-8 -*-
# python:2.x
__author__ = 'Administrator'
#类级
#在2.2中,提出了类型(type0与类(class)统一(请访问:https://www.python.org/download/releases/2.2.3/descintro(可能已经不存在了))-这使内建类型的子类化成为可能,并且添加一个新内建类型object
#用于所有内建类的公共祖先
#展示一个名为distinctdict类的代码,与平常的dict一样,但它不允许存在多个相同键值,,发出现相同项时,出现ValueError异常
class DistinctError(Exception):
pass
class distinctdict(dict):
def __setitem__(self, key, value):
try:
value_index=self.values().index(value)
#只要dict在2次调用之间没有发生改变
#keys()和values()将返回相应的列表
#否则,dict类型无法保证序列的顺序
existing_key=self.keys()[value_index]
if existing_key!=key:
raise DistinctError(('this value already exists for %s:'%(str(self[existing_key]))))
except ValueError as s :
pass
super(distinctdict,self).__setitem__(key,value)
my=distinctdict()
my['key']='value'
#my['other_key']='value'__main__.DistinctError: this value already exists for value:
my['other_key']='value2'
print my#{'other_key': 'value2', 'key': 'value'}
#看看刚刚的代码,都会发现都是通过实现内建类型,它们像子类型一样,更快而且更清晰
#例如
class F(list):
def __init__(self,a):
self.a=a
def dir(self):
print 'F.%s'%self.a
for i in self:
print i
f=F('secret')
print f
f.append('pics')
f.append('apply')
f.dir()
#其他
"""
从2.4开始,collections模块已经提供了一些可以用来实现有效容器类型
1:实现双端队列的deque类型
2:defaultdict类型提供了一个类似词典的对象,带有默认未知键码值,与prel或者ruby中的hash工作方式类似
----
内建类型覆盖大部分使用场景
如果打开创建一个类似序列或者映射新类,应该考试其特性并观察已有内建类型.
"""
python高级编程之(类级):子类内建类型的更多相关文章
- 第三章:Python高级编程-深入类和对象
第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
- python高级编程之元类(第3部分结束)
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #元编程 #new-style类带来了一种能力,通过2个特殊方法(_ ...
- python高级编程:有用的设计模式3
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...
- python高级编程:有用的设计模式1
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#设计械是可复用的,某种程序上它对软件设计中觉问题提供的语言 ...
- python高级编程技巧
由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr ...
- python高级编程之列表推导式
1. 一个简单的例子 在Python中,如果我们想修改列表中所有元素的值,可以使用 for 循环语句来实现. 例如,将一个列表中的每个元素都替换为它的平方: >>> L = [1, ...
- Python高级编程-Python一切皆对象
Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 ""&qu ...
- 第十一章:Python高级编程-协程和异步IO
第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...
- python高级编程:有用的设计模式2
# -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一 ...
随机推荐
- NetAnalyzer笔记 之 二. 简单的协议分析
[创建时间:2015-08-27 22:15:17] NetAnalyzer下载地址 上篇我们回顾完了NetAnalyzer一些可有可无的历史,在本篇,我决定先不对NetAnalyzer做介绍,而是先 ...
- [原创作品] Express 4.x 接收表单数据
好久没有写博客,从现在开始,将介绍用nodejs进行web开发的介绍.欢迎加群讨论:164858883. 之前的express版本在接收表单数据时,可以统一用res.params['参数名'],但在4 ...
- 多封装,少开放。强烈建议C++标准添加class之间的注入机制
近日在改动了一下下引擎代码(为了自己的组件),发现有些接口是仅仅有特定类及其内部函数才去訪问,却不使用友元声明的形式进行数据訪问--当然使用了普通非virtual的形式也就是意味着不建议重载. 故此: ...
- flush();close();dispose()
写一个写csv文件的程序,用streamwriter,觉得程序主体是没有问题的,但是一直写不进去,最后发现是因为没有调用flush(). msdn 对streamwriter.flush()的的说明是 ...
- React数据传递
React基础概念 React是基于组件化的开发,通过组件的组合,让web应用能够实现桌面应用的效果. React更有利于单页应用的开发. 并非MVC框架,只能算是V 具有单项数据流的特点 优势:代码 ...
- 无法连接到ASP.NET Development Server 解决办法
右击项目名称 -> 属性 -> Web -> 选特定端口 -> 输入一个端口值.
- linux虚拟机centos64位_6.5+VM10安装oracle11g图文详解
注意: vi基本命令:i--编辑状态 退出编辑并保存时先按ESC键,再按符合“:wq”或者":x"即可注意每个步骤时的当前用户,是root还是oracle 以root用户登录虚机 ...
- 技巧集:nginx作代理时,查看请求被转发到哪台服务器
使用Nginx代理多台服务器实行负载的时候,如何查看某一个请求被转发到哪台服务器上呢? upstream demo { server 127.0.0.1:8781; server 127.0.0.1: ...
- 最小生成树prim算法———模板
codevs.cn 最优布线问题 #include<cstdio>#include<cstring> bool u[101]; int g[101][101],minn[101 ...
- OpenSuse13.2硬盘安装
直接参考文章:OpenSuse硬盘安装 补充: Win7引导Grub4dos时,本人尝试根据xp引导方式中使用boot.ini来引导,引导成功,不需要bcdedit命令,简化了引导步骤.