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入门篇之文件
Oct 20 Python
Python 用Redis简单实现分布式爬虫的方法
Nov 23 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
Python正则表达式指南 推荐
Oct 09 Python
Python3字符串encode与decode的讲解
Apr 02 Python
python实现远程控制电脑
May 23 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
Python内建序列通用操作6种实现方法
Mar 26 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
Python 里最强的地图绘制神器
Mar 01 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+ajax 无刷新删除数据
2010/02/20 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php实现异步数据调用的方法
2015/12/24 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
python生成任意频率正弦波方式
2020/02/25 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
蔻驰英国官网:COACH英国
2020/07/19 全球购物
药物学专业学生的自我评价
2013/10/27 职场文书
老师推荐信
2013/10/28 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python