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 相关文章推荐
对numpy中轴与维度的理解
Apr 18 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
用python实现k近邻算法的示例代码
Sep 06 Python
python绘制热力图heatmap
Mar 23 Python
对Python中画图时候的线类型详解
Jul 07 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
python中reload重载实例用法
Dec 15 Python
python 生成正态分布数据,并绘图和解析
Dec 21 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 04 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/04/28 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
php通过各种函数判断0和空
2020/07/04 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
javascript 伪数组实现方法
2010/10/11 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
python实现斐波那契递归函数的方法
2014/09/08 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
Python中关键字global和nonlocal的区别详解
2018/09/03 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
详解Python中第三方库Faker
2020/09/25 Python
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
大学优秀班集体申报材料
2014/05/23 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
MySQL注入基础练习
2021/05/30 MySQL
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis
Nginx源码编译安装过程记录
2021/11/17 Servers
SQL Server 中的事务介绍
2022/05/20 SQL Server