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用Bottle轻量级框架进行Web开发
Jun 08 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
python实现梯度下降算法的实例详解
Aug 17 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
用python开发一款操作MySQL的小工具
May 12 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
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
php安装swoole扩展的方法
2015/03/19 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
php封装一个异常的处理类
2017/06/08 PHP
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
python爬取网站数据保存使用的方法
2013/11/20 Python
Python yield与实现方法代码分析
2018/02/06 Python
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
python爬虫中多线程的使用详解
2019/09/23 Python
python numpy数组复制使用实例解析
2020/01/10 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
自我鉴定书范文
2013/10/02 职场文书
会计自我鉴定范文
2013/10/06 职场文书
标准毕业生自荐信范文
2013/11/04 职场文书
退休感言
2014/01/28 职场文书
班级读书活动总结
2014/06/30 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
Python机器学习之底层实现KNN
2021/06/20 Python