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复制文件操作实例详解
Nov 10 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
Python 统计字数的思路详解
May 08 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
python把1变成01的步骤总结
Feb 27 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
django的model操作汇整详解
Jul 26 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 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
PHP数据缓存技术
2007/02/14 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
php实现Session存储到Redis
2015/11/11 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
php格式化时间戳
2016/12/17 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
jQuery之折叠面板的深入解析
2013/06/19 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
Python实现代码统计工具(终极篇)
2016/07/04 Python
Python 列表理解及使用方法
2017/10/27 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
园林施工员岗位职责
2013/12/11 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
大一军训感言
2014/01/09 职场文书
大学生党员承诺书
2014/05/20 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
初中体育课教学反思
2016/02/16 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL