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编程开发之类型转换convert实例分析
Nov 13 Python
实现python版本的按任意键继续/退出
Sep 26 Python
python批量替换页眉页脚实例代码
Jan 22 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
Python基于dom操作xml数据的方法示例
May 12 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
Python爬虫实现验证码登录代码实例
May 10 Python
解决python 找不到module的问题
Feb 12 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
python操作toml文件的示例代码
Nov 27 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
Cakephp 执行主要流程
2010/03/24 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
php中return的用法实例分析
2015/02/28 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
用javascript控制iframe滚动的代码
2007/04/10 Javascript
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
js实现车辆管理系统
2020/08/26 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
pandas ix &iloc &loc的区别
2019/01/10 Python
详解python和matlab的优势与区别
2019/06/28 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
python中二分查找法的实现方法
2020/12/06 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android