Python使用property函数和使用@property装饰器都能定义属性的get、set及delete的访问方法,他们的相同点主要如下三点:

1、定义这些方法后,代码中对相关属性的访问实际上都会触发这些定义的方法,从而实现应用代码用简单方法访问属性,但实际属性的访问逻辑由背后定义的方法控制,本质上二者的功效是相同的;

2、二者在定义方法上,都支持可以选择性的设置其中的一个、两个或三个操作类型;

3、定义的属性都必须是新增的属性,最好不能与类已有的实例变量同名,如果同名,该属性会覆盖原有实例变量,即原有实例变量不再有效,特别是不能与需要映射到具体实例变量同名(映射是指定义属性最终需要操作的某实例变量),否则会触发无限地递归调用。

不同点如下:

1、property函数是先定义属性操作方法,再通过property函数将操作方法与属性绑定;而@property装饰器则是直接定义操作方法,三个操作方法的名字都是属性名,只是装饰器有区别;

2、property函数定义的操作方法get、set及delete任选其一都可以,没有的方法就不能执行对应属性的访问,而@property中get方法是必选的;

3、property函数定义时还能指定对象的说明文档字符串,而@property中没有对应方法。

具体相关内容请参考:

1、《Python使用property函数定义属性简化属性访问的代码实现》

2、《 Python案例详解:使用property函数定义属性简化属性访问代码实现》

3、《Python案例详解:使用property函数定义与实例变量同名的属性会怎样?》

4、《Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter》

5、《Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解》

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!

Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析的更多相关文章

  1. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  2. 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

  3. Python使用property函数定义属性访问方法如果不定义fget会怎么样?

    我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...

  4. 13、python中的函数(闭包与装饰器)

    一.嵌套函数 函数的内部又再定义另一个函数,这个函数就叫嵌套函数,里面含函数就叫内部函数. 示例: 二.返回函数 函数可以接收函数对象作为参数,同理函数也能返回一个函数对象作为返回值. 示例: 返回函 ...

  5. Python基础之函数的闭包与装饰器的介绍

    1.闭包的概念: 如果在一个函数中,定义了另外一个函数,并且那个函数使用了外面函数的变量,并且外面那个函数返回了里面这个函数的引用,那么称为里面的这个函数为闭包. 2.话不多说,以demo示例: de ...

  6. PyQt(Python+Qt)学习随笔:QTreeWidget中标题相关属性访问方法headerItem、setHeaderLabels

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件窗口可以有一个标题头,其中包含部件中每个列的节(即标题).QTreeWidget的标题属性包 ...

  7. Python语法之函数、引用和装饰器

    所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用 函数是带名字的代码块,用于完成具体的工作 需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用该 任务 ...

  8. Python之路【第五篇】: 函数、闭包、装饰器、迭代器、生成器

    目录 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之可迭代对象 函数之迭代器 函数之生成器 面向过程的程序设计思想 一.函数进阶之函数对象 1. 函数对象 秉承着 ...

  9. Day 19 函数之闭包、装饰器

    一.什么是装饰器 器即函数 装饰即修饰,意指为其他函数添加新功能 装饰器定义:本质就是函数,功能是为其他函数添加新功能 二.装饰器遵循的原则 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰 ...

随机推荐

  1. JMeter100个线程竟然只模拟出1个并发

    线程组,是说到 JMeter 会第一时间想到的东西,也是我认为 JMeter 最难理解的知识点.因为项目让你做个压测,首先就是要考虑并发,用 JMeter 就是用多线程 来模拟多并发.但在看到线程组编 ...

  2. Pandas_基础_全

    Pandas基础(全) 引言 Pandas是基于Numpy的库,但功能更加强大,Numpy专注于数值型数据的操作,而Pandas对数值型,字符串型等多种格式的表格数据都有很好的支持. 关于Numpy的 ...

  3. maven install 时 pom中skip test

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-suref ...

  4. JAVA程序员工作常用英语(细心整理)

    基础----进阶 A. array数组accessible 可存取的 area面积audio 音频 addition 加法 action 行动 arithmetic 算法adjustment 调整 a ...

  5. sklearn.neighbors.NNeighborsClassifier 详细说明

    平时会用到sklearn.neighbors.NNeighborsClassifier函数来构建K最邻近分类器,所以这里对NNeighborsClassifier中的参数进行说明,文中参考的是scik ...

  6. linux云服务搭建七日杀服务器

    目录 准备工作 1.设置swap 2.安装screen 3.安装SteamCmd运行所需环境 4.创建一个用户 steamCMD与七日杀服务器端 1.下载并安装SteamCMD 2.登录steam账号 ...

  7. EF Core 一、重识 EF

    重识EF EF Core 学习资料:https://docs.microsoft.com/zh-cn/ef/core/dbcontext-configuration/ 本为作为EF Core学习的开始 ...

  8. ios、安卓前端兼容性1

    2.input框聚焦,ios出现outline或者阴影,安卓显示正常 解决方法 input:focus{outline:none} input:{-webkit-appearance: none;} ...

  9. 7、Spring Boot检索

    1.ElasticSearch简介 Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resha ...

  10. 3dmax利用静止静态对象功能,制作精准击碎效果

    一般情况下,当我们在3D建模中使用RayFire破碎插件来制作一些精准击碎效果时,需要将物体的击中部分定义为休眠对象,将其他未击中的部分定义为静态对象,以实现击中部分出现碎片的效果.但这种方式必须精准 ...