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聊天程序实例代码分享
Nov 18 Python
python实现的守护进程(Daemon)用法实例
Jun 02 Python
Python计算字符宽度的方法
Jun 14 Python
Python正则表达式如何进行字符串替换实例
Dec 28 Python
Python判断变量是否为Json格式的字符串示例
May 03 Python
pandas带有重复索引操作方法
Jun 08 Python
基于python的ini配置文件操作工具类
Apr 24 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
Python request中文乱码问题解决方案
Sep 17 Python
python自然语言处理之字典树知识总结
Apr 25 Python
Python如何把不同类型数据的json序列化
Apr 30 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实现简单文件下载的方法
2015/01/30 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
解javascript 混淆加密收藏
2009/01/16 Javascript
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
基于webpack 实用配置方法总结
2017/09/28 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
深入了解Python 变量作用域
2020/07/24 Python
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
市场营销专业个人自荐信格式
2013/09/21 职场文书
前台文员岗位职责
2013/12/28 职场文书
求职信写作要突出重点
2014/01/01 职场文书
酒店值班经理的工作职责范本
2014/02/18 职场文书
暑期培训随笔感言
2014/03/10 职场文书
面试自我评价范文
2014/09/17 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python