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中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
Python实现CET查分的方法
Mar 10 Python
对Python新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
高效使用Python字典的清单
Apr 04 Python
python读取几个G的csv文件方法
Jan 07 Python
python+pyqt5实现图片批量缩放工具
Mar 18 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
如何在python中判断变量的类型
Jul 29 Python
python数据库批量插入数据的实现(executemany的使用)
Apr 30 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
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
python实现输入数字的连续加减方法
2018/06/22 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
如何一键升级Python所有包
2020/11/05 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
毕业生求职的求职信
2013/12/05 职场文书
财务科科长岗位职责
2014/03/10 职场文书
少先队活动总结
2014/08/29 职场文书
2014年商场工作总结
2014/11/22 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python
Elasticsearch 配置详解
2022/04/19 Java/Android