天天看点

python的property语法的使用

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 &gt;</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,如需转载请自行联系原作者