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的轻便web框架Bottle
Apr 08 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
python解析基于xml格式的日志文件
Feb 25 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 Python
python使用rpc框架gRPC的方法
Aug 24 Python
python随机数分布random测试
Aug 27 Python
Django查询优化及ajax编码格式原理解析
Mar 25 Python
python 弧度与角度互转实例
Apr 15 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
详解python polyscope库的安装和例程
Nov 13 Python
详解Python生成器和基于生成器的协程
Jun 03 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
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
js性能优化技巧
2015/11/29 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python抓取最新博客内容并生成Rss
2015/05/17 Python
浅谈Django REST Framework限速
2017/12/12 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
苹果Mac升级:MacSales.com
2017/11/20 全球购物
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
培训主管的岗位职责
2013/11/23 职场文书
商务邀请函范文
2014/01/14 职场文书
护士岗位竞聘书
2015/09/15 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
新手入门Mysql--概念
2021/06/18 MySQL
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript