博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python的property语法的使用
阅读量:6435 次
发布时间:2019-06-23

本文共 1256 字,大约阅读时间需要 4 分钟。

Python中有一个property的语法,它类似于C#的get set语法,其功能有以下两点:

  1. 将类方法设置为只读属性;

  2. 实现属性的gettersetter方法;

下面着重说明这两点:

  • 将类方法设置为只读属性

首先请阅读下面的代码

1
2
3
4
5
6
7
8
9
class 
Book(
object
):
    
def 
__init__(
self
, title, author, pub_date):
        
self
.title 
= 
title
        
self
.author 
= 
author
        
self
.pub_date 
= 
pub_date
 
    
@
property
    
def 
des_message(
self
):
        
return 
u
'书名:%s, 作者:%s, 出版日期:%s' 
% 
(
self
.title, 
self
.author, 
self
.pub_date)

在这段代码中,将property作为一个装饰器修饰des_message函数,其作用就是将函数des_message变成了类的属性,且它是只读的。效果如下:

如上图所示,方法变成了属性,可以用访问属性的方式访问它。但是如果修改它的值,则会报错AttributeError错误,它是只读的

  • 实现属性的getter和setter方法

接着查看以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class 
Array(
object
):
 
    
def 
__init__(
self
, length
=
0
, base_index
=
0
):
        
assert 
length >
= 
0
        
self
._data 
= 
[
None 
for 
in 
xrange
(length)]
        
self
._base_index 
= 
base_index
         
    
def 
get_base_index(
self
):
        
return 
self
._base_index
 
    
def 
set_base_index(
self
, base_index):
        
self
._base_index 
= 
base_index
 
    
base_index 
= 
property
(
        
fget
=
lambda 
self
self
.get_base_index(),
        
fset
=
lambda 
self
, value: 
self
.set_base_index(value)
    
)

这里我们给类Array设置了一个base_index属性,它使用property实现了base_indexfgetfset功能,base_index是可读可写的,效果如下:

如上图所示,base_index是可读可写的。

  • 最后

propertyPython的很好的语法特性,我们应该在编程中经常使用它。

本文转自 许大树 51CTO博客,原文链接:http://blog.51cto.com/abelxu/1874121,如需转载请自行联系原作者
你可能感兴趣的文章
Apache应用实例:建立yum服务器
查看>>
功能表单之树形选择字段类型的高级使用——JEPLUS软件快速开发平台
查看>>
servlet监听器
查看>>
查看mysql进程--show processlist
查看>>
我的友情链接
查看>>
openstack之windows2003/08系统qcow2制作
查看>>
Web游戏开发编程:最神奇的“触觉振动”
查看>>
UTF8 匹配汉字,字母,数字
查看>>
mongodb复制集部署
查看>>
Install gevent in AIX with gcc
查看>>
栈与队列
查看>>
Java 8 中的工厂方法模式
查看>>
SQL语句字符串处理大全
查看>>
backtrack5局域网通信软件——信使
查看>>
安装Apache2.4.23
查看>>
设计模式(创建型)之原型模式
查看>>
android launcher 相关
查看>>
This Android SDK requires An... ADT to the late...
查看>>
报错:failed to get the task for process XXX(解决方案)
查看>>
使用自定义铃声
查看>>