python 魔术方法指南

python 魔术方法指南

ID:6472163

大小:231.00 KB

页数:22页

时间:2018-01-15

python 魔术方法指南_第1页
python 魔术方法指南_第2页
python 魔术方法指南_第3页
python 魔术方法指南_第4页
python 魔术方法指南_第5页
资源描述:

《python 魔术方法指南》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Python魔术方法指南入门构造和初始化构造定制类§用于比较的魔术方法§用于数值处理的魔术方法表现你的类控制属性访问创建定制序列反射可以调用的对象会话管理器创建描述器对象持久化对象总结附录介绍此教程为我的数篇文章中的一个重点。主题是魔术方法。什么是魔术方法?他们是面向对象的Python的一切。他们是可以给你的类增加”magic”的特殊方法。他们总是被双下划线所包围(e.g.__init__或者__lt__)。然而他们的文档却远没有提供应该有的内容。Python中所有的魔术方法均在Python官方文档中有相应描述,但是对于他们的描述比较混乱而且组织比较松散。很难找到有一个例子(也许他们原

2、本打算的很好,在开始语言参考中有描述很详细,然而随之而来的确是枯燥的语法描述等等)。所以,为了修补我认为Python文档应该修补的瑕疵,我决定给Python中的魔术方法提供一些用平淡的语言和实例驱使的文档。我在开始已经写了数篇博文,现在在这篇文章中对他们进行总结。我希望你能够喜欢这篇文章。你可以将之当做一个教程,一个补习资料,或者一个参考。本文章的目的仅仅是为Python中的魔术方法提供一个友好的教程。构造和初始化每个人都知道一个最基本的魔术方法,__init__。通过此方法我们可以定义一个对象的初始操作。然而,当我调用x=SomeClass()的时候,__init__并不是第一个被调

3、用的方法。实际上,还有一个叫做__new__的方法,来构造这个实例。然后给在开始创建时候的初始化函数来传递参数。在对象生命周期的另一端,也有一个__del__方法。我们现在来近距离的看一看这三个方法:__new__(cls,[...)__new__是在一个对象实例化的时候所调用的第一个方法。它的第一个参数是这个类,其他的参数是用来直接传递给__init__方法。__new__方法相当不常用,但是它有自己的特性,特别是当继承一个不可变的类型比如一个tuple或者string。我不希望在__new__上有太多细节,因为并不是很有用处,但是在Python文档中有详细的阐述。__init__(

4、self,[…)此方法为类的初始化方法。当构造函数被调用的时候的任何参数都将会传给它。(比如如果我们调用x=SomeClass(10,'foo')),那么__init__将会得到两个参数10和foo。__init__在Python的类定义中被广泛用到。__del__(self)如果__new__和__init__是对象的构造器的话,那么__del__就是析构器。它不实现语句delx(所以代码将不会翻译为x.__del__())。它定义的是当一个对象进行垃圾回收时候的行为。当一个对象在删除的时候需要更多的清洁工作的时候此方法会很有用,比如套接字对象或者是文件对象。注意,因为当解释器退出的

5、时候如果对象还存在,不能保证__del__能够被执行,所以__del__can’tserveasareplacementforgoodcodingpractices()~~~~~~~放在一起的话,这里是一个__init__和__del__实际使用的例子。fromos.pathimportjoinclassFileObject:'''给文件对象进行包装从而确认在删除时文件流关闭'''def__init__(self,filepath='~',filename='sample.txt'):#读写模式打开一个文件self.file=open(join(filepath,filename),'

6、r+')def__del__(self):self.file.close()delself.file让定制的类工作起来使用Python的魔术方法的最大优势在于他们提供了一种简单的方法来让对象可以表现的像内置类型一样。那意味着你可以避免丑陋的,违反直觉的,不标准的的操作方法。在一些语言中,有一些操作很常用比如:ifinstance.equals(other_instance):#dosomething在Python中你可以这样。但是这会让人迷惑且产生不必要的冗余。相同的操作因为不同的库会使用不同的名字,这样会产生不必要的工作。然而有了魔术方法的力量,我们可以定义一个方法(本例中为__eq

7、__),就说明了我们的意思:ifinstance==other_instance:#dosomething这只是魔术方法的功能的一小部分。它让你可以定义符号的含义所以我们可以在我们的类中使用。就像内置类型一样。用于比较的魔术方法Python对实现对象的比较,使用魔术方法进行了大的逆转,使他们非常只管而不是笨拙的方法调用。而且还提供了一种方法可以重写Python对对象比较的默认行为(通过引用)。以下是这些方法和他们的作用。__cmp__(self

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。