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通过poll实现异步IO的方法
Jun 04 Python
深入理解python函数递归和生成器
Jun 06 Python
python 系统调用的实例详解
Jul 11 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
python smtplib发送带附件邮件小程序
May 22 Python
Python使用ctypes调用C/C++的方法
Jan 29 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
python实现倒计时小工具
Jul 29 Python
python中JWT用户认证的实现
May 18 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
使用tkinter实现三子棋游戏
Feb 25 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中养成7个面向对象的好习惯
2010/07/17 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
CSS常用网站布局实例
2008/04/03 Javascript
js 加载并解析XML字符串的代码
2009/12/13 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
javascript smipleChart 简单图标类
2011/01/12 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
python显示天气预报
2014/03/02 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
python实现周期方波信号频谱图
2018/07/21 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
毕业生找工作推荐信
2013/11/21 职场文书
积极向上的团队口号
2014/06/06 职场文书
测绘工程专业求职信
2014/07/15 职场文书
预备党员个人总结
2015/02/14 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
写给同事的离职感言
2015/08/04 职场文书
Go语言基础知识点介绍
2021/07/04 Golang