首页 > 代码库 > python高级编程之(类级):子类内建类型
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工作方式类似
----
内建类型覆盖大部分使用场景
如果打开创建一个类似序列或者映射新类,应该考试其特性并观察已有内建类型.
"""