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工作方式类似

----

内建类型覆盖大部分使用场景

如果打开创建一个类似序列或者映射新类,应该考试其特性并观察已有内建类型.

"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值