Python 类,property属性(简化属性的操作),@property,property()用法示例


Posted in Python onOctober 12, 2019

本文实例讲述了Python 类,property属性(简化属性的操作),@property,property()用法。分享给大家供大家参考,具体如下:

property属性的创建方式有两种:1.@property装饰器方式   2.类属性方式 ( 类属性=property() )

property属性可以简化实例对象对属性的操作(获取、设置),可以对属性做类型校验和预处理等。

装饰器方式:

demo.py(@property,获取属性值,旧式类与新式类都有的方式):

class Goods:
  @property
  # 只能传递self参数。 必须返回一个值
  def size(self):
    return 100 # 必须返回一个值
obj = Goods()
result = obj.size # 调用属性(没有用小括号,用属性的方式调用函数)
print(result)
# property属性一般对属性值做一些预处理或格式化处理等,可以简化属性的获取。

运行结果:

100

demo.py(@xxx.setter,@xxx.deleter,设置属性值、删除属性,新式类支持的方式):

class Goods(object):
  def __init__(self):
    # 原价
    self.original_price = 100
    # 折扣
    self.discount = 0.8
  @property
  # 方式一 获取属性值 (新式类和旧式类都支持该方式)
  def price(self):
    # 实际价格 = 原价 * 折扣
    new_price = self.original_price * self.discount
    return new_price
  @price.setter
  # 方式二 设置属性值 (旧式类不支持,需要传两个参数)
  def price(self, value):
    self.original_price = value
  @price.deleter
  # 方式三 删除属性 (旧式类不支持)
  def price(self):
    del self.original_price
obj = Goods()
obj.price     # 获取商品价格 (自动调用@property修饰的函数)
obj.price = 200  # 修改商品原价 (自动调用@price.setter修饰的函数,并将200传给函数)
del obj.price   # 删除商品原价 (自动调用@price.deleter修饰的函数)

类属性方式:

demo.py(类属性创建property属性,旧式类与新式类都支持):

class Goods(object):
  def __init__(self):
    # 原价
    self.original_price = 100
    # 折扣
    self.discount = 0.8
  def get_price(self):
    # 实际价格 = 原价 * 折扣
    new_price = self.original_price * self.discount
    return new_price
  def set_price(self, value):
    self.original_price = value
  def del_price(self):
    del self.original_price
  # 类属性。 property(方法名1,方法名2,方法名3,"属性描述信息")
  PRICE = property(get_price, set_price, del_price, "属性描述信息...")
obj = Goods()
obj.PRICE     # 获取商品价格 自动调用propert()函数第一个参数指定的方法。
obj.PRICE = 200  # 设置商品原价 自动调用propert()函数第二个参数指定的方法。
desc = Goods.PRICE.__doc__ # 自动获取第四个参数中设置的值:属性描述信息...
print(desc)
del obj.PRICE   # 删除商品原价 自动调用propert()函数第三个参数指定的方法。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
分享python数据统计的一些小技巧
Jul 21 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
对python中执行DOS命令的3种方法总结
May 12 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
python函数的万能参数传参详解
Jul 26 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
打包PyQt5应用时的注意事项
Feb 14 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 #Python
Python 迭代,for...in遍历,迭代原理与应用示例
Oct 12 #Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 #Python
Python Collatz序列实现过程解析
Oct 12 #Python
python logging日志模块原理及操作解析
Oct 12 #Python
Python爬虫之urllib基础用法教程
Oct 12 #Python
python 生成器和迭代器的原理解析
Oct 12 #Python
You might like
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
Webstorm2016使用技巧(SVN插件使用)
2018/10/29 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
一些Python中的二维数组的操作方法
2015/05/02 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
学习Django知识点分享
2019/09/11 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
C#和SQL Server的面试题
2016/08/12 面试题
EJB发布WEB服务一般步骤
2012/10/31 面试题
成品仓管员岗位职责
2013/12/11 职场文书
大学秋游活动方案
2014/02/11 职场文书
暑期研修感言
2014/02/17 职场文书
创新型城市实施方案
2014/03/06 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
村委会贫困证明范文
2014/09/21 职场文书
承诺函范文
2015/01/21 职场文书
护士自荐信范文
2015/03/25 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
Pandas-DataFrame知识点汇总
2022/03/16 Python
python_tkinter事件类型详情
2022/03/20 Python