Python中property函数用法实例分析


Posted in Python onJune 04, 2018

本文实例讲述了Python中property函数用法。分享给大家供大家参考,具体如下:

通常我们在访问和赋值属性的时候,都是在直接和类(实例的)的__dict__打交道,或者跟数据描述符等在打交道。但是假如我们要规范这些访问和设值方式的话,一种方法是引入复杂的数据描述符机制,另一种恐怕就是轻量级的数据描述符协议函数Property()。它的标准定义是:

+ property(fget=None,fset=None,fdel=None,doc=None)
+ 前面3个参数都是未绑定的方法,所以它们事实上可以是任意的类成员函数

property()函数前面三个参数分别对应于数据描述符的中的__get____set____del__方法,所以它们之间会有一个内部的与数据描述符的映射。

综上描述,其实property()函数主要是用来规范化访问类的属性和修改类属性的值的一种方法。

property()函数可以用0,1,2,3,4个参数来调用,顺序依次是get,set,del,doc,这四个。

property()的实现方法有两种,见代码

第一种:

#!/usr/bin/python
#coding: utf-8
class Rectangle(object):
  def __init__(self, width, height):
    self.width = width
    self.height = height
  def getSize(self):
    return self.width, self.height
  def setSize(self, size):
    self.width, self.height = size
  def delSize(self):
    del self.height
  size = property(getSize, setSize, delSize, "实例对象")
r = Rectangle(10, 20)
# 输出此时矩形的长和宽
# 此时执行的是getSize
print r.size
# 修改size的值
# 此时执行的是setSize
r.size = 100, 200
print r.size
del r.height
print r.width
# height属性已经被删除,下面语句会报错
# print r.size

运行结果:

(10, 20)
(100, 200)
100

第二种:(装饰器)

#!/usr/bin/python
#coding: utf-8
class Rectangle(object):
  def __init__(self, width, height):
    self.width = width
    self.height = height
  # 下面加@符号的函数名要相同
  # 第一个是get方法
  @property
  def Size(self):
    return self.width, self.height
  # 此处是set方法,是@property的副产品
  @Size.setter
  def Size(self, size): # 此时接收的是一个元祖
    self.width, self.height = size
  @Size.deleter
  def Size(self):
    del self.width
    del self.height
r = Rectangle(10, 20)
print r.Size
r.Size = 100, 200
print r.Size
del r.height
# 由于上一步删除了self.height属性,所以下面再访问的时候会报错
# print r.Size
# 可以访问width,还没有被删除
print r.width

运行结果:

(10, 20)
(100, 200)
100

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python切换hosts文件代码示例
Dec 31 Python
详解Python中的__init__和__new__
Mar 12 Python
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
Android应用开发中Action bar编写的入门教程
Feb 26 Python
python executemany的使用及注意事项
Mar 13 Python
numpy数组之存取文件的实现示例
May 24 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
python进度条显示之tqmd模块
Aug 22 Python
requests在python中发送请求的实例讲解
Feb 17 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 #Python
python最长回文串算法
Jun 04 #Python
python中字符串的操作方法大全
Jun 03 #Python
Python Logging 日志记录入门学习
Jun 02 #Python
python实现寻找最长回文子序列的方法
Jun 02 #Python
python实现对求解最长回文子串的动态规划算法
Jun 02 #Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 #Python
You might like
模仿OSO的论坛(二)
2006/10/09 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
区分JS中的undefined,null,"",0和false
2007/03/08 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
Python for循环中的陷阱详解
2018/07/13 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
存储过程和函数的区别
2013/05/28 面试题
高中毕业生个人自我鉴定
2013/11/24 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
python的变量和简单数字类型详解
2021/09/15 Python