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根据出生日期获得年龄的方法
Mar 31 Python
python实现在每个独立进程中运行一个函数的方法
Apr 23 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
Python的面向对象编程方式学习笔记
Jul 12 Python
Python实现自动为照片添加日期并分类的方法
Sep 30 Python
微信跳一跳自动运行python脚本
Jan 08 Python
python监控进程脚本
Apr 12 Python
django 通过URL访问上传的文件方法
Jul 28 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
python下对hsv颜色空间进行量化操作
Jun 04 Python
Python参数传递及收集机制原理解析
Jun 05 Python
用python发送微信消息
Dec 21 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 使用GD库为页面增加水印示例代码
2014/03/24 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
Win10下Python环境搭建与配置教程
2016/11/18 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
在python shell中运行python文件的实现
2019/12/21 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
怎样从/向数据文件读/写结构
2014/11/23 面试题
建筑施工员岗位职责
2013/11/26 职场文书
继电保护工岗位职责
2014/01/05 职场文书
医学求职自荐信
2014/06/21 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
Python图片处理之图片裁剪教程
2021/05/27 Python
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python