property属性

定义

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

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

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

实现property属性的两种方式

装饰器

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

  • @property对应读取
  • @方法名.setter修改
  • @方法名.deleter删除属性
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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 ,此参数是该属性的描述信息
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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装饰器改进私有属性的get和set方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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)

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

转载于:https://www.cnblogs.com/happyyangyanghappy/p/10917139.html

python3中property使用方法详解相关推荐

  1. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  2. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  3. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  4. php 文件扫描去重,PHP中的去重方法详解和文件下载

    本文主要和大家分享PHP中的去重方法详解和文件下载,在php中文件导入过程中,经常会遇到重复事件,那么就需要我们去重,然后进行下载. 1.思想 先设置一个存储主键数组,和一个空数组.解析文件,然后看要 ...

  5. keep alive PHP,vue中keep-alive使用方法详解

    这次给大家带来vue中keep-alive使用方法详解,vue中keep-alive使用的注意事项有哪些,下面就是实战案例,一起来看一下. 1.keep-alive的作用以及好处 在做电商有关的项目中 ...

  6. python input函数详解_对Python3中的input函数详解

    下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...

  7. java中main是什么_Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...

  8. session在PHP中的用法,PHP中session使用方法详解

    php中session详解 综述 Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.从上述的定义中我们可以看到,Session实际 ...

  9. Promise中的then方法详解

    Promise详解 /* * 创建Promise实例的时候得传一个函数 executor,并且这个函数接收两个参数+ resolve函数:将实例的状态从 pending 修改为 fulfilled/r ...

最新文章

  1. 基于openCV的项目实战1:信用卡数字识别
  2. php cc攻击代码,php cc攻击代码与防范方法
  3. 微信小程序底部导航Tabbar
  4. APPlication,Session和Cookie的区别
  5. python模块手册_python模块说明
  6. labview叠加白噪声_强化学习中Ornstein-Uhlenbeck噪声是鸡肋吗?
  7. odciexttableopen 调用出错 error open log_如何在 Spring 异步调用中传递上下文
  8. 如何理解Mysql的索引及他们的原理--------二叉查找树和平衡二叉树和B树和B+树
  9. 《零基础看得懂的C语言入门教程 》——(十一)C语言自定义函数真的很简单
  10. [学习笔记] 乱世之神杀疯了 —— K-D tree
  11. javaweb开发的准备工作——配置篇
  12. 关于C语言逻辑值的说法错误的是( ),2017年计算机二级c语言题库及答案
  13. 一个模型搞定十大自然语言任务:NLP全能选手来了 | 论文+代码
  14. 《树莓派Python编程入门与实战(第2版)》——1.9 QA
  15. python分词工具,你用哪个
  16. 解决 Eclipse不支持tomcat9
  17. 数据治理——主数据项目实施
  18. python抓取图片数字_从opencv python图像中提取数字
  19. 统计学原理 数值型数据的整理与展示
  20. Squid缓存代理服务器

热门文章

  1. linux监控mysql性能,MySQL 性能监控4大指标——第二部分
  2. Bezier(贝塞尔)曲线(三阶)的轨迹规划在自动驾驶中的应用(四)
  3. java controller json_Controller 获取 JSON
  4. c语言 强制转换 作用域,C语言之总结1详解
  5. Elasticsearch7.X 字段数据类型
  6. Dubbo3.0 简介
  7. 语言怎么解决扭魔方_吧台高度没留够,怎么坐都变扭,直接加玻璃框没想到也能解决难题...
  8. ES6-函数中new.target 方法
  9. 小汤学编程之JavaEE学习day03——JSP组成结构、JSP原理、JSP生命周期、JSP九大内置对象、四大作用域、JSP的MVC模式
  10. Unknown system variable 'tx_isolation'报错