Python中有一个property的语法,它类似于C#的get set语法,其功能有以下两点:
将类方法设置为只读属性;
实现属性的getter和setter方法;
下面着重说明这两点:
将类方法设置为只读属性
首先请阅读下面的代码
<code># -*- coding:utf-8 -*-</code>
<code>class</code> <code>Book(</code><code>object</code><code>):</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>, title, author, pub_date):</code>
<code> </code><code>self</code><code>.title </code><code>=</code> <code>title</code>
<code> </code><code>self</code><code>.author </code><code>=</code> <code>author</code>
<code> </code><code>self</code><code>.pub_date </code><code>=</code> <code>pub_date</code>
<code> </code><code>@</code><code>property</code>
<code> </code><code>def</code> <code>des_message(</code><code>self</code><code>):</code>
<code> </code><code>return</code> <code>u</code><code>'书名:%s, 作者:%s, 出版日期:%s'</code> <code>%</code> <code>(</code><code>self</code><code>.title, </code><code>self</code><code>.author, </code><code>self</code><code>.pub_date)</code>
在这段代码中,将property作为一个装饰器修饰des_message函数,其作用就是将函数des_message变成了类的属性,且它是只读的。效果如下:
实现属性的getter和setter方法
接着查看以下代码:
<code>class</code> <code>Array(</code><code>object</code><code>):</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>, length</code><code>=</code><code>0</code><code>, base_index</code><code>=</code><code>0</code><code>):</code>
<code> </code><code>assert</code> <code>length ></code><code>=</code> <code>0</code>
<code> </code><code>self</code><code>._data </code><code>=</code> <code>[</code><code>None</code> <code>for</code> <code>i </code><code>in</code> <code>xrange</code><code>(length)]</code>
<code> </code><code>self</code><code>._base_index </code><code>=</code> <code>base_index</code>
<code> </code>
<code> </code><code>def</code> <code>get_base_index(</code><code>self</code><code>):</code>
<code> </code><code>return</code> <code>self</code><code>._base_index</code>
<code> </code><code>def</code> <code>set_base_index(</code><code>self</code><code>, base_index):</code>
<code> </code><code>base_index </code><code>=</code> <code>property</code><code>(</code>
<code> </code><code>fget</code><code>=</code><code>lambda</code> <code>self</code><code>: </code><code>self</code><code>.get_base_index(),</code>
<code> </code><code>fset</code><code>=</code><code>lambda</code> <code>self</code><code>, value: </code><code>self</code><code>.set_base_index(value)</code>
<code> </code><code>)</code>
这里我们给类Array设置了一个base_index属性,它使用property实现了base_index的fget,fset功能,base_index是可读可写的,效果如下:
<a href="http://s5.51cto.com/wyfs02/M00/8A/56/wKioL1guUM_zD-dvAAAu1Adzu_8586.png" target="_blank"></a>
如上图所示,base_index是可读可写的。
最后
property是Python的很好的语法特性,我们应该在编程中经常使用它。
本文转自 许大树 51CTO博客,原文链接:http://blog.51cto.com/abelxu/1874119,如需转载请自行联系原作者