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字符类型的一些方法小结
May 16 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
python学习开发mock接口
Apr 28 Python
Opencv实现抠图背景图替换功能
May 21 Python
Python字符串对象实现原理详解
Jul 01 Python
Django框架model模型对象验证实现方法分析
Oct 02 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
python asyncio 协程库的使用
Jan 21 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 Python
Elasticsearch 基本查询和组合查询
Apr 19 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
分享一个php 的异常处理程序
2014/06/22 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
javascript 写类方式之二
2009/07/05 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
详解Python中的type和object
2018/08/15 Python
Python对excel文档的操作方法详解
2018/12/10 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
python脚本定时发送邮件
2020/12/22 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
劲霸男装广告词改编版
2014/03/21 职场文书
金融专业求职信
2014/08/05 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python