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 15 Python
Python时区设置方法与pytz查询时区教程
Nov 27 Python
用python实现的线程池实例代码
Jan 06 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 Python
python 字符串常用函数详解
Sep 11 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
PyTorch在Windows环境搭建的方法步骤
May 12 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
python Tornado框架的使用示例
Oct 19 Python
详解基于python的图像Gabor变换及特征提取
Oct 26 Python
python实现在列表中查找某个元素的下标示例
Nov 16 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
PHP5中虚函数的实现方法分享
2011/04/20 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
2014/05/15 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
Smarty变量用法详解
2016/05/11 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python开发中module模块用法实例分析
2015/11/12 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
pycharm安装图文教程
2017/05/02 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
美国网上花店:JustFlowers
2017/02/12 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
项目施工员岗位职责
2014/03/09 职场文书
关于环保的建议书
2014/05/12 职场文书
项目工作说明书
2014/07/29 职场文书
陪护人员误工证明
2015/06/24 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
拙作再改《我的收音机情缘》
2022/04/05 无线电
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS