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 相关文章推荐
RC4文件加密的python实现方法
Jun 30 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
python实现旋转和水平翻转的方法
Oct 25 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
Python values()与itervalues()的用法详解
Nov 27 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
Python 如何实现访问者模式
Jul 28 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
php中explode的负数limit用法分析
2015/02/27 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
php阳历转农历优化版
2016/08/08 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
JS随机数产生代码分享
2018/02/24 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
给Python初学者的一些编程技巧
2015/04/03 Python
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
python 实现敏感词过滤的方法
2019/01/21 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
Python 使用多属性来进行排序
2019/09/01 Python
python图形用户接口实例详解
2019/12/16 Python
python压包的概念及实例详解
2021/02/17 Python
python+opencv实现车道线检测
2021/02/19 Python
python中if嵌套命令实例讲解
2021/02/25 Python
幼儿园端午节活动方案
2014/08/25 职场文书
SQL Server中的游标介绍
2022/05/20 SQL Server