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中的正则表达式的用法
Apr 09 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 Python
pandas 根据列的值选取所有行的示例
Nov 07 Python
Python 判断奇数偶数的方法
Dec 20 Python
对python 读取线的shp文件实例详解
Dec 22 Python
Python检测端口IP字符串是否合法
Jun 05 Python
python 数据类型强制转换的总结
Jan 25 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 Python
Python基本的内置数据类型及使用方法
Apr 13 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
Email+URL的判断和自动转换函数
2006/10/09 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
PHP7 新增常量
2021/03/09 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
vue实现搜索功能
2019/05/28 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
python脚本设置系统时间的两种方法
2016/02/21 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
大队干部竞选演讲稿
2014/04/28 职场文书
爱岗敬业演讲稿
2014/05/05 职场文书
禁止酒驾标语
2014/06/25 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
酒店厨房管理制度
2015/08/06 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
班主任寄语2016
2015/12/04 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
MySQL多表查询机制
2022/03/17 MySQL
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript