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下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
从头学Python之编写可执行的.py文件
Nov 28 Python
Python中django学习心得
Dec 06 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
python 如何实现遗传算法
Sep 22 Python
Python实现中英文全文搜索的示例
Dec 04 Python
python_tkinter弹出对话框创建
Mar 20 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数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
Python实现队列的方法
2015/05/26 Python
详解python3实现的web端json通信协议
2016/12/29 Python
Python csv模块使用方法代码实例
2019/08/29 Python
python将字母转化为数字实例方法
2019/10/04 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
40岁生日感言
2014/02/15 职场文书
《老山界》教学反思
2014/04/08 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
作文批改评语
2014/12/25 职场文书
高中运动会广播稿
2015/08/19 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
《窃读记》教学反思
2016/02/18 职场文书