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基础之函数用法实例详解
Sep 10 Python
python获取本机mac地址和ip地址的方法
Apr 29 Python
Scrapy爬虫实例讲解_校花网
Oct 23 Python
Python实现自动发送邮件功能
Mar 02 Python
Python模拟随机游走图形效果示例
Feb 06 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
Python字典实现伪切片功能
Oct 28 Python
Python爬虫中Selenium实现文件上传
Dec 04 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
我的论坛源代码(二)
2006/10/09 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
js读写(删除)Cookie实例详解
2013/04/17 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python实现LRU算法的2种方法
2015/06/24 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
Python中的集合介绍
2019/01/28 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
Python高并发和多线程有什么关系
2020/11/14 Python
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
销售员个人求职的自我评价
2014/02/10 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
搬迁通知
2015/04/20 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
公司人事管理制度
2015/08/05 职场文书
详解MySQL的半同步
2021/04/22 MySQL