python3中property使用方法详解


Posted in Python onApril 23, 2019

本文实例为大家分享了python3中的property使用方法,供大家参考,具体内容如下

property属性

定义

一个可以使实例方法用起来像实例属性一样的特殊关键字,可以对应于某个方法,通过使用property属性,能够简化调用者在获取数据的流程(使代码更加简明)。

property属性的定义和调用要注意以下几点:

调用时,无需括号,加上就错了;并且仅有一个self参数

实现property属性的两种方式

装饰器

新式类中的属性有三种访问方式,并分别对应了三个被

  • @property对应读取
  • @方法名.setter修改
  • @方法名.deleter删除属性
class Goods:
 def __init__(self):
 self.age = 18
 
  @property
  def price(self): # 读取
    return self.age
    
  # 方法名.setter
  @price.setter # 设置,仅可接收除self外的一个参数
  def price(self, value):
    self.age = value
    
  # 方法名.deleter
  @price.deleter # 删除
  def price(self):
    del self.age

# ############### 调用 ###############
obj = Goods()  # 实例化对象 
obj.age  # 直接获取 age属性值
obj.age= 123   #  修改age的值
del obj.age  #  删除age属性的值

类属性

当使用类属性的方式创建property属性时,property()方法有四个参数

  • 第一个参数是方法名,调用 对象.属性 时自动触发执行方法
  • 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
  • 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
  • 第四个参数是字符串,调用 对象.属性.doc ,此参数是该属性的描述信息
class Goods(object):
  def __init__(self):  
    self.price = 100  # 原价
    self.discount = 0.8 # 折扣

  def get_price(self):
    # 实际价格 = 原价 * 折扣
    new_price = self.price * self.discount
    return new_price

  def set_price(self, value):
    self.price = value

  def del_price(self):
    del self.price
   # 获取    设置     删除    描述文档
  PRICE = property(get_price, set_price, del_price, '价格属性描述...')
 # 使用此方式设置
 
obj = Goods()
obj.PRICE     # 获取商品价格
obj.PRICE = 200  # 修改商品原价
del obj.PRICE   # 删除商品原价

使用property取代getter和setter方法

使用@property装饰器改进私有属性的getset方法

class Money(object):
  def __init__(self):
    self.__money = 0

  # 使用装饰器对money进行装饰,那么会自动添加一个叫money的属性,当调用获取money的值时,调用装饰的方法
  @property
  def money(self):
    return self.__money

  # 使用装饰器对money进行装饰,当对money设置值时,调用装饰的方法
  @money.setter
  def money(self, value):
    if isinstance(value, int):
      self.__money = value
    else:
      print("error:不是整型数字")

a = Money()
a.money = 100
print(a.money)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python爬虫常用的模块分析
Aug 29 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
Python常用特殊方法实例总结
Mar 22 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
Pyinstaller 打包exe教程及问题解决
Aug 16 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
python制作抽奖程序代码详解
Jan 15 Python
pytorch 中autograd.grad()函数的用法说明
May 12 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 Python
Pytest中conftest.py的用法
Jun 27 Python
详解爬虫被封的问题
Apr 23 #Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
Apr 23 #Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 #Python
Python3.5 Pandas模块之Series用法实例分析
Apr 23 #Python
使用Python控制摄像头拍照并发邮件
Apr 23 #Python
详解Python静态网页爬取获取高清壁纸
Apr 23 #Python
Python matplotlib画图与中文设置操作实例分析
Apr 23 #Python
You might like
使用php来实现网络服务
2009/09/15 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
实例解析php的数据类型
2018/10/24 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
JavaScript面象对象设计
2008/04/28 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
JS实现灯泡开关特效
2020/03/30 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
python检测服务器是否正常
2014/02/16 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
flask开启多线程的具体方法
2020/08/02 Python
Python多线程的退出控制实现
2020/08/10 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
Skyscanner波兰:廉价航班
2017/11/07 全球购物
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
青年创业培训欢迎词
2014/01/10 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
化妆品活动策划方案
2014/05/23 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
田径运动会通讯稿
2015/07/18 职场文书
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis