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之编写类之四再论继承
Oct 11 Python
Python函数中定义参数的四种方式
Nov 30 Python
Python创建xml文件示例
Mar 22 Python
python的Tqdm模块的使用
Jan 10 Python
python使用minimax算法实现五子棋
Jul 29 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
如何通过python检查文件是否被占用
Dec 18 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 Python
Python基础学习之奇异的GUI对话框
May 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
一个数据采集类
2007/02/14 PHP
php函数的常用方法及注意之处小结
2011/07/10 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
Python代码的打包与发布详解
2014/07/30 Python
pycharm安装图文教程
2017/05/02 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
python for循环remove同一个list过程解析
2019/08/14 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
python缩进长度是否统一
2020/08/02 Python
Python远程linux执行命令实现
2020/11/11 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
大专应届生个人简历的自我评价
2013/10/15 职场文书
银行职业规划书范文
2013/12/28 职场文书
结婚周年感言
2014/02/24 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
2014年督导工作总结
2014/11/19 职场文书
高中数学课堂教学反思
2016/02/18 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS