文章目录

  • @property 前言
  • @property 介绍
  • property方法实现
  • @property 实现

@property 前言

>>> class test(object):
...     def __init__(self):
...         self.__num = 10
...     def getNum(self):
...         return self.__num
...     def setNum(self, value):
...         self.__num = value
...
>>> t = test()
>>> t.getNum()
10
>>> t.setNum(20)
>>> t.getNum()
20

你会发现,例子中我们属性只有1个,增加了1对方法,也就是2个方法。我们已经知道,当把属性设置为私有属性时,通过添加对应的方法获取其值,通过添加对应的方法设置值,还可以通过方法做数据的有效性校验、过滤等操作。

那么,如果属性非常多时,我们上面的做法又会显得非常麻烦,这有没有好的解决方案呢?答案是有的。python中给我们提供了一些关键词,专门帮我们解决上面的问题,我们今天就详细学习这些知识。

@property 介绍

@property是Python内置的一种装饰器。(什么是装饰器,暂时可以理解为给函数动态加上功能的一种语法)。@property的内部实现是比较复杂的。现在我们先学会如何使用,等以后有了一定的分析源码的能力,再回过头分析其内部实现。

从今以后,见到@property 第一反应就是:@property专门负责把一个方法变成同名属性的。
是一种进行类或实例属性操作(有效性校验、过滤等操作)的有效,简便的途径。

解释:上面我们用修饰了方法,此时会把方法直接变成同名属性。当我们获取属性的值时,实际上就是调用的此方法。

此时,本身又自动创建了另一个装饰器,负责把一个方法变成属性赋值,即:num的setter方法。于是,修饰的其实是,当我们给赋值时,实际上就是调用的此方法。

property方法实现

>>> class test(object):
...     def __init__(self):
...         self.__num = 10
...     def getNum(self):
...         return self.__num
...     def setNum(self, value):
...         self.__num = value
...     num = property(getNum, setNum)
...
>>> t = test()
>>> print(t.num)  # 10
10
>>> t.num = 20
>>> print(t.num)  # 20
20

关于property方法,我们来看下官方文档:

由文档可得:

  1. property方法包含四个参数,分别为fget,fset,fdel,doc,分别对应getter方法,setter方法,deleter方法和方法说明。
  2. property()方法返回一个property属性,如果c是C的实例,那么c.x会调用getter方法,c.x = value会调用setter方法,而del c.x会调用deleter方法。

@property 实现

>>> class test(object):
...     def __init__(self):
...         self.__num = 10
...     @property
...     def num(self):
...         return self.__num
...     @num.setter
...     def num(self, value):
...         self.__num = value
...
>>> t = test()
>>> t.num
10
>>> t.num = 20
>>> t.num
20

关于@property,官方文档如下:

根据文档可得:

  1. 我们可以把property()方法当成一个装饰器来使用,使用@property对方法进行装饰。
  2. 装饰器@property把方法x()转换成了与方法名同名的getter方法,"I’m the ‘x’ property."是property的doc参数。
  3. 调用方法和property()方法一样

补充:

  1. @property定义只读属性
  2. @setter定义可读可写属性
  3. @deleter定义可读可写可删除属性

python @property 解释相关推荐

  1. python语言属于-python属于解释语言吗

    Python是一门解释型语言? Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在. 如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写 ...

  2. python怎么解释语言_python属于解释语言吗

    Python是一门解释型语言? Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在. 如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写 ...

  3. python怎么解释语言_python是解释型语言吗

    Python 是解释型的语言吗?它会被编译吗? 这个问题没有想象中那么好回答.和很多人认识世界一样,习惯以一个简单的模型去评判一些事物.而事实上,里面包含了很多很多的细节. 通常的说法,编译代表着将一 ...

  4. python采用解释方式执行_Python解释执行原理

    谈到了Python语句的两种执行方式,实际上,这两种运行方式在本质 上是相同的,它们都是由解释器来解释执行我们提供的Python语句. 这里所说的解释执行是相对于编译执行而言的.我们知道,使用诸如 C ...

  5. Python?Python!(python是解释型还是编译型)

    文章目录 解释型语言?编译型语言? 1. 为什么要有解释型语言? 2. `.pyc`文件 3 对于python是解释型还是编译型的判断 3.1 字节码和机器语言的区别 3.2 解释器和虚拟机 4. 为 ...

  6. python property作用_python中@property的作用和getter setter的解释

    @property作用: python的@property是python的一种装饰器,是用来修饰方法的. 我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同 ...

  7. python采用解释方式执行_Python初学(一)

    <本系列性文章是根据一篇python教程来写的,如有侵权请联系管理员删除文章> 在学习Python之前要先知道什么是程序设计语言,也就是程序设计语言的概述是什么? 程序设计语言的概述: 程 ...

  8. python property内建函数的介绍

    为什么80%的码农都做不了架构师?>>>    函数property的基本功能就是把类中的方法当作属性来访问,下面以一个有意思的例子介绍一下: 假如有一只猫,它忘了它喜欢吃什么,下面 ...

  9. python中文解释-python注释中文

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 4.python代码注释最后更新于:2019-10-05 14:25:4 ...

  10. python中文解释-python是解释型语言么

    python是解释型语言么? python并非完全是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行,相对于py文件来说,编译成pyc和pyo本质上和p ...

最新文章

  1. 机器学习评价指标ROC AUC
  2. Tfs 2010使用小技巧
  3. 亲爱的,你是最棒的!
  4. iptables中文man文档
  5. 12.源码阅读(app启动流程-android api 26)
  6. 获取进程或线程的ID以及句柄信息
  7. hbase shell远程连接_HBase安装详解
  8. 【最新】2021年自然语言处理 (NLP) 算法学习路线!
  9. LINUX下载编译sqlite-jdbc(支持mips64el/loongarch64的jar包下载)
  10. WinUSB Component for .Net WinForm
  11. TMOD、TCON、SCON、PCON、SBUF寄存器说明
  12. android呼叫转移代码,动态Android呼叫转移
  13. OpenGL中phong光照模型详解
  14. 多个containers 共用一个pvc_庆阳PVC排水管生产线销售,真不错_崔氏机械
  15. Mac PS CC2018详细软件按照教程
  16. 某宝上关于PMP低价续证,可信吗?
  17. 物联网基于wifi定位模型
  18. 域名贵吗?域名值不值钱?
  19. matlab相机标定程序,MATLAB单相机校准程序中文.pdf
  20. 基于长短期记忆网络的电力负荷预测(Python代码实现)

热门文章

  1. 解决IE浏览器被2345劫持问题
  2. P1084 [NOIP2012 提高组] 疫情控制
  3. Docker三剑客详解
  4. 今日财富杂志今日财富杂志社今日财富编辑部2022年第11期目录
  5. 如何清除redis缓存
  6. 【iOS取证篇】iOS设备进入DFU模式方法汇总
  7. 英语: 听力(Listening)
  8. FRM 风险管理基础:复习提纲二
  9. 【统计分析】(task4) 应用随机过程(更新ing)
  10. 【雷丁学姐】借助大数据进行学生的学校申请预测