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 23 Python
Python-嵌套列表list的全面解析
Jun 08 Python
Python实现注册登录系统
Aug 08 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
对命令行模式与python交互模式介绍
May 12 Python
对Django 转发和重定向的实例详解
Aug 06 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
Python学习笔记之While循环用法分析
Aug 14 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
Python3如何判断三角形的类型
Apr 12 Python
pycharm 快速解决python代码冲突的问题
Jan 15 Python
利用Python函数实现一个万历表完整示例
Jan 23 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+java实现自动新闻滚动窗口
2006/10/09 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
php中取得文件的后缀名?
2012/02/20 PHP
php中adodbzip类实例
2014/12/08 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
python内存管理分析
2015/04/08 Python
Python 数据结构之队列的实现
2017/01/22 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
个人简历中的自我评价范例
2013/10/29 职场文书
烹调加工管理制度
2014/02/04 职场文书
数学教学随笔感言
2014/02/17 职场文书
三方协议书范本
2014/04/22 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
升学宴演讲稿
2014/09/01 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
努力学习保证书
2015/02/26 职场文书
毕业生政审意见范文
2015/06/04 职场文书
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby