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的Bottle框架中使用微信API的示例
Apr 23 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
Aug 23 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 Python
python实现文件+参数发送request的实例代码
Jan 05 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
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
简单谈谈Python中的闭包
2016/11/30 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
Python适配器模式代码实现解析
2019/08/02 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
Pytorch 实现权重初始化
2019/12/31 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
python判断变量是否为列表的方法
2020/09/17 Python
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
高中生的自我鉴定范文
2014/01/24 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
行政答辩状范文
2015/05/21 职场文书
PHP解决高并发问题
2021/04/01 PHP