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 相关文章推荐
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
python将一组数分成每3个一组的实例
Nov 14 Python
python实现文本界面网络聊天室
Dec 12 Python
详解Python 字符串相似性的几种度量方法
Aug 29 Python
python检测服务器端口代码实例
Aug 31 Python
python下载库的步骤方法
Oct 12 Python
Python3直接爬取图片URL并保存示例
Dec 18 Python
keras 多gpu并行运行案例
Jun 10 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
用Python简陋模拟n阶魔方
Apr 17 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 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中文字母数字验证码实现代码
2008/04/25 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
PHP序列化操作方法分析
2016/09/28 PHP
javascript import css实例代码
2008/07/18 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
前端路由&webpack基础配置详解
2019/06/10 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
Python实现字典去除重复的方法示例
2017/07/31 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python中字符串内置函数的用法总结
2018/09/13 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
Python数据正态性检验实现过程
2020/04/18 Python
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
大专计算机个人求职的自我评价
2013/10/21 职场文书
软环境建设心得体会
2014/09/09 职场文书
三方协议书
2015/01/27 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL