首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-22 19:01
  • 3212
  • 10763
blog.csdn.net

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

一、    引言
Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰器相关的内容,在后面将单独的章节来介绍。Python总共包括三个内置装饰器(注意abstractmethod这个装饰器是从abc模块导入的,不是内置的),除了前面介绍的类方法装饰器classmethod、静态方法装饰器staticmethod外,还有一个property装饰器,这个装饰器与property函数的目的是一样,只是使用方法上有所不同。

二、    装饰器property的语法释义
Python中的property装饰器与property函数一样,是将对属性的访问转换为对应的方法,因此与property函数,装饰器也提供了属性的get、set、del方法。其相关定义都是在类内定义方法的语句前使用,具体语法如下:
1、    get装饰器:
@property
def 属性名(self):
    方法代码
return 属性返回值

        语法释义:
1)    get装饰器用于访问属性名时执行相关的代码,必须是@property这个内置装饰器来定义,所有的装饰器属性的get方法都必须是使用这个内置装饰器。也就是说被 @property 装饰的方法是获取属性值的方法,被装饰方法的名字会被用做 属性名;
2)    此处的属性名与property返回的实例属性是一个概念,其他地方使用该属性名进行访问,该属性名在后面定义set方法和del方法时都必须是该名字;
3)    属性返回值可以是一个经过方法代码处理过的值,可以是某个实例变量或实例变量运算后的值,如果直接返回某个实例变量,则方法代码可以没有。

2、    set装饰器:
@属性名.setter
def 属性名(self,value):
     方法代码


     设置某个实例变量来保存value或value经过运算的值
语法释义:
1)    本部分的装饰器是@属性名.setter,属性名是前面@property 定义get方法时指定的属性名,必须一致。“setter”用于指定该装饰器是set装饰器,固定用“setter”。被 @属性名.setter 装饰的方法是设置属性值的方法;
2)    注意def的函数名的名字必须与属性名一致,在此种情况下,定义属性的get、set、del的函数名都是属性名,这个与前面介绍的Python不支持函数的重载看起来是矛盾的,但实际上由于装饰器本身也是个函数,装饰器后面的函数被装饰器本身这个函数嵌套,因此其作用域仅限于装饰器函数内,因此重名并不存在覆盖的情况;
3)    value是属性要设置的值,如果属性是经过运算得出,赋值也需要反向倒推,如果函数直接将value保存到实例变量,则方法代码中只需一个赋值语句就可以。

3、    del装饰器:
@属性名.deleter
def 属性名(self):
     方法代码

1)    被 @属性名.deleter 装饰的方法是删除属性值的方法,属性名同样必须是前面get方法定义的属性名,“deleter ”是固定不变的,其作用就是在外部调用“del 属性名”时方法当做删除操作执行。
2)    注意def的函数名的名字必须与属性名一致。
  
注意:
1.    通过@property定义一个属性时,get装饰器是必须定义的,set和del装饰器看是否需要再确认是否定义,如果没有定义setter,该属性就不能赋值,如果没有定义deleter,则该属性不能删除。
2.    装饰器定义的属性名和类实例变量名不要相同,其原因与前面章节介绍property函数定义属性的原因是一样的。具体请参考本博客的《第7.26节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?》

本节详细的介绍了property装饰器的使用语法,注意通过property装饰器定义属性时必须至少定义一个getter装饰器用于读取属性的值。老猿认为,实际上property装饰器与property函数本质上是一致的,只是定义的语法有所不同。下节将结合一个案例对上述知识点进行进一步的介绍。
老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览333596 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/93385341"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top