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字符串处理函数简明总结
Apr 13 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
python编程羊车门问题代码示例
Oct 25 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
Python lambda表达式用法实例分析
Dec 25 Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
执行Python程序时模块报错问题
Mar 26 Python
Python中bisect的用法及示例详解
Jul 20 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 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新手NOTICE错误常见解决方法
2011/12/07 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python中的rjust()方法使用详解
2015/05/19 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
python安装pil库方法及代码
2019/06/25 Python
python实现在一个画布上画多个子图
2020/01/19 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
播音主持女孩的自我评价分享
2013/11/20 职场文书
酒店秘书求职信范文
2014/02/17 职场文书
学校安全责任书
2014/04/14 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
暑期培训心得体会
2014/09/02 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL