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套接字流重定向实例汇总
Mar 03 Python
Python学生信息管理系统修改版
Mar 13 Python
pandas取出重复数据的方法
Jul 04 Python
python retrying模块的使用方法详解
Sep 25 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
使用Python内置模块与函数进行不同进制的数的转换
Apr 26 Python
python golang中grpc 使用示例代码详解
Jun 03 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 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
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
javascript document.compatMode兼容性
2010/02/23 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
Python单链表的简单实现方法
2014/09/23 Python
django迁移文件migrations的实现
2020/03/31 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
css3发光搜索表单分享
2014/04/11 HTML / CSS
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
如何用PHP实现邮件发送
2012/12/26 面试题
管理信息系学生的自我评价
2014/01/11 职场文书
周年庆典主持词
2014/04/02 职场文书
一帮一活动总结
2014/05/08 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
vue实现同时设置多个倒计时
2021/05/20 Vue.js
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis