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 httplib,smtplib使用方法
Sep 06 Python
python抓取某汽车网数据解析html存入excel示例
Dec 04 Python
python通过函数属性实现全局变量的方法
May 16 Python
Python os模块学习笔记
Jun 21 Python
深入分析python数据挖掘 Json结构分析
Apr 21 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
Python利用pandas处理Excel数据的应用详解
Jun 18 Python
python中的decimal类型转换实例详解
Jun 26 Python
使用python绘制温度变化雷达图
Oct 18 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
python中函数返回多个结果的实例方法
Dec 16 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 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 redis实现超迷你全文检索
2017/03/04 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
Python中文件的读取和写入操作
2018/04/27 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
python 搜索大文件的实例代码
2019/07/08 Python
python随机生成库faker库api实例详解
2019/11/28 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
机电一体化毕业生求职信
2013/11/02 职场文书
销售员岗位职责范本
2014/02/03 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
刑事附带民事代理词
2015/05/25 职场文书
《月光曲》教学反思
2016/02/16 职场文书
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技