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 Mysql自动备份脚本
Jul 14 Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 Python
Python如何判断数独是否合法
Sep 08 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
分数霸榜! python助你微信跳一跳拿高分
Jan 08 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
python创建n行m列数组示例
Dec 02 Python
使用Matplotlib 绘制精美的数学图形例子
Dec 13 Python
python中altair可视化库实例用法
Jan 26 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 Python
golang特有程序结构入门教程
Jun 02 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设计模式 Observer(观察者模式)
2011/06/26 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
javascript两段代码,两个小技巧
2010/02/04 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
python中定义结构体的方法
2013/03/04 Python
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
环境科学专业个人求职的自我评价
2013/11/28 职场文书
教育见习报告范文
2014/11/03 职场文书
班主任自我评价范文
2015/03/11 职场文书
刑事起诉书范文
2015/05/19 职场文书
春节晚会开场白
2015/05/29 职场文书