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中functools模块的常用函数解析
Jun 30 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
python 字符串和整数的转换方法
Jun 25 Python
Python实现使用request模块下载图片demo示例
May 24 Python
python实现文件的备份流程详解
Jun 18 Python
python实现中文文本分句的例子
Jul 15 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
在 Python 中接管键盘中断信号的实现方法
Feb 04 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
Python logging模块写入中文出现乱码
May 21 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 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
php目录管理函数小结
2008/09/10 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
php Hex RGB颜色值互换的使用
2013/05/10 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
关于jQuery中的end()使用方法
2011/07/10 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
python批量提取word内信息
2015/08/09 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
python调用摄像头拍摄数据集
2019/06/01 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
汽车专业毕业生推荐信
2013/11/12 职场文书
大学军训感言600字
2014/02/25 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
停车场管理协议书范本
2014/10/08 职场文书
三年级学生评语大全
2014/12/26 职场文书
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers