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 base64 decode incorrect padding错误解决方法
Jan 08 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
python 读取DICOM头文件的实例
May 07 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
Jan 05 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
python 爬取英雄联盟皮肤并下载的示例
Dec 04 Python
python中filter,map,reduce的作用
Jun 10 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绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
json字符串传到前台input的方法
2018/08/06 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
js实现简单扫雷
2020/11/27 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
python字符串替换示例
2014/04/24 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
python groupby 函数 as_index详解
2019/12/16 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
煤矿班组长岗位职责
2013/12/29 职场文书
运动会广播稿80字
2014/01/23 职场文书
家长对孩子的感言
2014/03/10 职场文书
房屋委托书范本
2014/04/04 职场文书
数字化校园建设方案
2014/05/03 职场文书
自我推荐信范文
2014/05/09 职场文书
班主任工作实习计划
2015/01/16 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers