Python中property属性实例解析


Posted in Python onFebruary 10, 2018

本文主要讲述的是对Python中property属性(特性)的理解,具体如下。

定义及作用:

在property类中,有三个成员方法和三个装饰器函数。
三个成员方法分别是:fget、fset、fdel,它们分别用来管理属性访问;
三个装饰器函数分别是:getter、setter、deleter,它们分别用来把三个同名的类方法装饰成property。
fget方法用来管理类实例属性的获取,fset方法用来管理类实例属性的赋值,fdel方法用来管理类实例属性的删除;
getter装饰器把一个自定义类方法装饰成fget操作,setter装饰器把一个自定义类方法装饰成fset操作,deleter装饰器把一个自定义类方法装饰成fdel操作。
只要在获取自定义类实例的属性时就会自动调用fget成员方法,给自定义类实例的属性赋值时就会自动调用fset成员方法,在删除自定义类实例的属性时就会自动调用fdel成员方法。

下面从三个方面加以说明

Num01?>原始的getter和setter方法,获取私有属性值

# 定义一个钱的类
class Money(object):
  def __init__(self):
    self._money = 0

  def getmoney(self):
    return self._money

  def setmoney(self, value):
    if isinstance(value, int):
      self._money = value
    else:
      print("error:不是整型数字")


money = Money()
print(money.getmoney())
# 结果是:0
print("====修改钱的大小值====")
money.setmoney(100)
print(money.getmoney())
# 结果是:100

Num02?>使用property升级getter和setter方法

# 定义一个钱的类
class Money(object):
  def __init__(self):
    self._money = 0

  def getmoney(self):
    return self._money

  def setmoney(self, value):
    if isinstance(value, int):
      self._money = value
    else:
      print("error:不是整型数字")

  money = property(getmoney, setmoney)

money = Money()
print(money.getmoney())
# 结果是:0
print("====修改钱的大小值====")
money.setmoney(100)
print(money.getmoney())
# 结果是:100

#最后特别需要注意一点:实际钱的值是存在私有便令__money中。而属性money是一个property对象,
是用来为这个私有变量__money提供接口的。

#如果二者的名字相同,那么就会出现递归调用,最终报错。

Num03?>使用property取代getter和setter

@property成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小

# 定义一个钱的类
class Money(object):
  def __init__(self):
    self._money = 0

  @property
  # 注意使用@property装饰器对money函数进行装饰,就会自动生成一个money属性,
当调用获取money的值时,就调用该函数
  def money(self):
    return self._money

  @money.setter
  # 使用生成的money属性,调用@money.setter装饰器,设置money的值
  def money(self, value):
    if isinstance(value, int):
      self._money = value
    else:
      print("error:不是整型数字")

aa = Money()
print(aa.money)
# 结果是:0
print("====修改钱的大小值====")
aa.money = 100
print(aa.money)
# 结果是:100

总结

以上就是本文关于Python中property属性实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python 爬虫学习笔记之单线程爬虫
Sep 21 Python
django使用html模板减少代码代码解析
Dec 12 Python
pyqt5自定义信号实例解析
Jan 31 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
python lxml中etree的简单应用
May 10 Python
python操作kafka实践的示例代码
Jun 19 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
Django框架HttpResponse对象用法实例分析
Nov 01 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
Pygame的程序开始示例代码
May 07 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 #Python
Python中协程用法代码详解
Feb 10 #Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 #Python
Django中Forms的使用代码解析
Feb 10 #Python
Python中列表与元组的乘法操作示例
Feb 10 #Python
Python程序运行原理图文解析
Feb 10 #Python
Python迭代器和生成器定义与用法示例
Feb 10 #Python
You might like
附件名前加网站名
2008/03/23 PHP
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
常用DOM整理
2015/06/16 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
深入理解python中的闭包和装饰器
2016/06/12 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
简述数组与指针的区别
2014/01/02 面试题
西部世纪面试题
2014/12/05 面试题
广告学专业推荐信范文
2013/11/23 职场文书
授权委托书(完整版)
2014/09/10 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
西游降魔篇观后感
2015/06/15 职场文书