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中unittest用法实例
Sep 25 Python
Python heapq使用详解及实例代码
Jan 25 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 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多线程编程之管道通信实例分析
2015/03/07 PHP
PHP内置加密函数详解
2016/11/20 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
python实现简单颜色识别程序
2020/02/19 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
工商管理系学生的自我评价分享
2013/11/29 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
运动会开幕式邀请函
2014/01/22 职场文书
实习单位指导教师评语
2014/12/30 职场文书
2015年社区工作总结
2015/04/08 职场文书
清明节主题班会
2015/08/14 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python
mysql序号rownum行号实现方式
2022/12/24 MySQL