Python 描述器(descriptor).docx
《Python 描述器(descriptor).docx》由会员分享,可在线阅读,更多相关《Python 描述器(descriptor).docx(24页珍藏版)》请在第一文库网上搜索。
1、Python描述器(descriptor).docx目录1 .概述i2 .定义13 .问题24 .DescriptorProtocol75 .调用描述器96 .属性Properties107 .函数与方法FunctionsandMethods138 .静态方法与类方法159 .参考文章20环境macosx,python3.51 .概述定义描述器(descriptor),总结协议,展示描述器的调用,研究一个自定义的描述器,以及内置的python描述器,包括:函数,属性(properties),静态方法(staticmethods),以及类方法。通过给出纯python等效的以及一个样本applic
2、ation.学习有关描述器不仅仅提供通往一个更大的工具箱,它也创造了一个关于python怎么的工作的更深的理解,以及赞赏它的优雅设计。2 .定义一个descriptor是一个简单的方法管理访问属性。方式有三种:set,get,deleteo一般,一个descriptor是一个绑定行为的对象的属性,该属性可以被在描述器协议(descriptorprotocol)中的方法重写。这些方法:get_(),_set_(),delete_(),如果任何这些方法在一个对象中被定义,就说他是个描述器。默认的访问这些属性的方法是get,set,或者delete这些属性从一个对象的字典中。例如:a.x有一个查找链
3、,以开始,然后type,_dict_xL然后继续以类似的通过type基类的方式,除了元类(metaclasses),如果一个查找值是一个定义了一个描述器方法的对象,python将会重写默认的行为,并且调用描述器方法。这种情况的发生的优先链取决于哪一个描述器方法被定义了。描述器是一个强大的,通用功能的协议。他们是属性(properties),方法,静态方法,类方法,以及super。等背后的工作机理。他们被用于整个python中,来完成新实的类。3 .问题假设通过一个python写的管理系统来运营一家书店,系统中包含一个类Book,采集作者,标题,书的价格。classBook(object):de
4、f_init_(self,author,title,price):self.author=authorself.title=titleself.price=pricedef_str_(self):return0-l.format(self.author,self.title)12345678从上面的定义来看,这个设计是没什么问题,但是可以发现,书的价格可以是任意值,包括负值,这与实际情况不合作如下修改:fromweakrefimportWeakKeyDictionaryclassPrice(object):def_init_(self):self.default=0self.values=We
5、akKeyDictionary()def_get_(self,instance):returnself.values.get(instance,self.default)def_set_(self,instance,value):ifvalue100:raiseValueError(Pricemustbebetween0and100.)self.valuesinstance=valuedef_delete_(self,instance):delself.valuesinstance123456789101112131415161718注:使用弱引用weakref,使得不在使用的对象能被垃圾回收
6、。修改Book类:classBook(object):price=Price()def_init_(self,author,title,price):self.author=authorself.title=titleself.price=pricedef_str_(self):return0-l.format(self.author,self.title)12345678910b=Book(WilliamFaulkner,TheSoundandtheFury,12)b.price#12b.price=-12#Traceback(mostrecentcalllast):#Filezline1,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 描述器descriptor 描述 descriptor