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(一)Python环境安装
Aug 20 Python
在Python的Django框架中为代码添加注释的方法
Jul 16 Python
python中异常捕获方法详解
Mar 03 Python
名片管理系统python版
Jan 11 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
详解python的四种内置数据结构
Mar 19 Python
Pycharm新手教程(只需要看这篇就够了)
Jun 18 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
详解Python 循环嵌套
Jul 09 Python
python 实现全球IP归属地查询工具
Dec 18 Python
使用Python下载抖音各大V视频的思路详解
Feb 06 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
linux下为php添加curl扩展的方法
2011/07/29 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
Ajax基础知识详解
2017/02/17 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
实例讲解python中的协程
2018/10/08 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
Python pandas如何向excel添加数据
2020/05/22 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
公共场所标语
2014/06/30 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
Vue如何清空对象
2022/03/03 Vue.js
Java实现带图形界面的聊天程序
2022/06/10 Java/Android