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

Python中的getter、setter、deleter getter作用:在获取某个属性值(面积)之前想要做别的事情(获取长宽),就给这个属性添加 getter。 setter作用:在给属性(面积)赋值之前想要做别的事情(不许修改面积,代码中返回ValueError报错),就给这个属性添加 setter。 阅读详情

第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.youkuaiyun.com/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

Python中@property装饰器与getter方法的深入解析 幸运的是,Python提供了一个装饰器@property,可以简化属性访问和修改的过程。在name属性的getter方法中,我们使用@property装饰器,将其转换为只读属性。在访问属性时,getter方法被调用并输出了“Getting name”,然后返回属性值“Alice”。与只读属性不同的是,我们还定义了一个setter方法,用于修改属性值。同时,它也提供了更多灵活的属性访问和修改方式。此时,我们可以看到,在访问属性时,getter方法被自动调用,并输出了“Getting name”。 阅读详情

相关推荐

STK轨道仿真环境搭建实战:从地月系到多天体场景

本文详细介绍了STK轨道仿真环境搭建的实战指南,从基础的地月系统到复杂的多天体场景。通过逐步操作说明和实用技巧,帮助用户快速掌握STK软件的使用方法,提升轨道仿真效率,适用于航天任务设计和教学演示。

weixin_30312563的博客 397

Python(装饰器)的getter和setter的方法使用详解

@property 可以将一个方法的调用方式变成“属性调用”。 @property 主要用于帮助我们处理属性的读操作、写操作。 Python没有真正的私有变量,但是我们可以使用以下约定将变量定义为私有变量:使用一个下划线_将变量名称前缀。虽然这不会完全阻止从外部访问该变量,但是这是一种常用的约定,告诉其他程序员不应该直接访问该变量。

qq_41619571的博客 9409

4090显卡实测:PointPillars在KITTI数据集上的3D目标检测复现全流程(附避坑指南)

本文详细记录了在NVIDIA RTX 4090显卡上,从环境搭建、数据处理到模型训练与评估,完整复现PointPillars算法在KITTI数据集上进行3D目标检测的全流程。重点分享了版本配置、数据预处理、性能调优及常见问题的避坑指南,帮助开发者高效利用硬件资源,成功跑通并理解这一经典3D检测项目。

purple的博客 914

python类属性@property(全) tcy

1.属性 属性定义: python中属性其实是普通方法的衍生 属性操作: 用@property装饰器操作类属性 用类或实例直接操作类属性obj.name,obj.age=18,del obj.age 用python内置函数操作属性 属性意义: 访问属性时类似访问字段象,属性由方法衍生而来,如Python没有属性,方法完全可代替其功能 可动态获取属性值,应用更灵活;可制定属性规则,防随意修改属性值 属性函数: hasattr(object, n.

tcy-阿春 2069

从交换机安全配置,看常见局域网攻击

前言 构建零信任网络,自然离不开网络准入(NAC),这就涉及到交换机的一些安全测试,于是有了此文《从交换机安全配置看常见局域网攻击》。 交换机安全配置 如本文标题所说从交换机安全配置看常见的局域网攻击,那么下面提到的各种攻击方式,自然是建立在交换机安全配置之上来说的。我们通过h3c官方提供的《H3C 交换机安全加固手册》和《安全配置指导》,从这两份手册可以看出交换机支持的安全配置非常多,基本已经覆盖了各种我们熟知局域网攻击。下面就挑几个典型的攻击方式进行演示。 arp欺骗 【一>所有资源获取&lt

kali_Ma的博客 1万+

STM32F4的sct文件理解

原文地址http://blog.sina.com.cn/s/blog_898f36590100ya2l.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_34008805的博客 995

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

第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter详解一、 引言Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰器相关的内容,在后面将单独的章节来介绍。Python总共包括三个内置装饰器(注意abstractmethod这个装饰器是从abc模块导入的,不是内置的),除了前面介绍的类方法装饰器classmethod、...

weixin_36342477的博客 224

【实战】基于 Inner-IoU 的 YOLOv8 优化指南:显著提升检测精度

Inner-IoU 凭借辅助边框的创新设计,成功解决了传统 IoU 损失在小目标、遮挡场景下的收敛难题,为 YOLOv8 注入了更强的定位能力。从原理剖析到代码集成,本教程已为你铺就了一条“精度提升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“精度优异”的答卷——相信我,当你看到检测框精准贴合目标的那一刻,你会明白这份尝试的价值。

m0_64661770的博客 107

python:@property装饰器

1、@property 内置装饰器函数,把一个方法调用方式变成属性调用方式。(将一个方法当成一个属性使用)。注意@property装饰器只能在面向对象中使用。 2、访问使用@property装饰器装饰的函数可以直接调用函数名 (会执行一段功能(函数)然后返回值) 3、@property 装饰器只能修饰不带参数的方法。 计算圆的周长和面积 from math import pi class Circ...

珂鸣玉的博客 412

作物生长模型Oryza V3实战1:为什么要研究它

ORYZAV3是水稻生长模拟模型ORYZA2000的最新升级版本(3.5版),作为作物生长模型,它通过数学方法和计算机技术模拟水稻生长发育过程及其与环境条件的相互作用。主要功能包括:模拟不同条件下的水稻生长和产量形成、评估环境胁迫影响、分析土壤碳氮动态以及进行区域尺度模拟。国内应用广泛,科研机构用于气候变化影响评估、灌溉模式比较等研究,并开展参数敏感性分析和应用培训。使用流程分为六个步骤:确定输入参数(气象、土壤、作物三类)、参数校准、设置模拟环境、运行模型、分析结果(输出50个参数)和计算产量(穗干重×收

504

7、布尔网络的基础定义

本文介绍了布尔网络的基础定义及其在系统生物学中的应用。布尔网络是一种描述复杂系统动态行为的数学模型,由布尔变量和布尔函数组成,能够模拟生物系统中基因调控、信号传导和细胞代谢等过程。文章详细阐述了布尔网络的基本结构、动力学特征(如状态转移图和吸引子),以及其在生物建模中的重要价值,并探讨了优化和简化技术(如Backward Boolean Equivalence)如何提升其计算效率。

yhn45678901的博客 262

Python OOPs/OOP:Python @property

Person 类中使用@property 装饰器的主要问题是我们不能使用property 来修改类的属性或值。@property 装饰器还使 getter 和 setter 的使用变得更加容易,我们将在本文后面了解有关 getter 和 setter 的更多信息。因此,@property装饰器使我们的工作变得更容易,因为我们不需要手动调用property()函数来获取类的属性。让我们以相同的 Person 类为例,学习如何使用删除器装饰器方法来删除 Person 类的 name 属性。

新华编程特战队 882

3.DJI-payload SDK自定义控件的设计:

自定义控件(Widget)是指负载运行时,在用户界面中显示的自定义 UI 控件,以帮助用户快速查看负载独特的设备状态,或者对负载设进行设置。这些 UI 控件可以显示在以下用户界面中。Pilot 2 应用程序;大疆智图;基于 MSDK 开发的应用程序。这种自定义控件并不是通过 MSDK 实现的,而是通过 PSDK 的配置实现的。。

哒宰的博客 770

python装饰器 property_python中的property装饰器

既要保护类的封装特性,又要让开发者可以使用“对象.属性”的方式操作操作类属性,除了使用 property() 函数,Python 还提供了 @property 装饰器。通过 @property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对“()”小括号。@property 的语法格式如下:@propertydef方法名(self)代码块例如,定义一个矩形类,并定义用 @prope...

weixin_39679091的博客 182

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Python @property装饰器:从封装原理到工程实践

在面向对象编程中,封装是核心概念之一,它通过将数据与操作数据的方法绑定,实现对内部状态的保护。Python通过描述符协议实现了一套优雅的属性访问机制,其中@property装饰器是关键实现。这项技术的核心价值在于,它允许开发者以访问属性的简洁语法调用方法,同时能在背后执行数据验证、计算逻辑或资源管理等复杂操作,完美平衡了接口的易用性与内部逻辑的严谨性。在工程实践中,@property常用于实现计算属性、惰性求值、数据验证和API平滑升级等场景,是构建健壮且Pythonic类接口的重要工具。本文以@prope

weixin_32288959的博客 260

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

26、property

文章目录一、装饰器二、property 一、装饰器 装饰器是在不修改被装饰对象源代码,以及调用方式的前提下为被装饰对象添加新功能的可调用对象 可调用对象: 函数、类 二、property property: 是用类实现的装饰器 print(property) # <class 'property'> # property是一个装饰器, 用来干什么的? # 需求 class People: def __init__(self): ...

zpp15603669517的博客 165

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Python基础学习-14(魔法方法与属性,日期时间处理,字符串深入与编码)

"""自定义播放列表——演示 __len__ / __getitem__ / __eq__ / __contains__"""self.name = name ### 列表名称self.songs=list(songs) # 内存存储歌曲列表"""调用len(playlist)时自动触发""""""调用playlist[0]、playlist[1:3]时自动触发""""""调用playlist_a == plaulist_b时自动触发"""

xundl的博客 324

python3 核心笔记

本文主要是针对python3的一些核心要点做一些记录,感兴趣的可以关注和订阅。会持续更新,这个玩意学习一下,可以为数据分析和AI打下一定的基础。

yanghuashuiyue的专栏 617

Python_使用 `@property` 包装器来实现属性的 getter 和 setter 方法——实现对属性的安全访问。——六月十四

这个方法被定义为属性的 getter 方法,用于获取属性的值。同时,我们可以为属性定义一个对应的 setter 方法,用于设置属性的值。我们可以在 setter 方法中添加任意的额外逻辑操作或数据验证,确保属性的值符合预期,并提供更安全和方便的属性访问方式。包装器,我们将这两个属性的访问方式定义为 getter 方法,并在对应的 setter 方法中进行数据验证。包装器,我们可以将属性访问的控制权交给 getter 和 setter 方法,从而实现对属性的安全访问。在访问属性时,我们可以直接使用。

qq_59344127的博客 338

Python类装饰器中的__get__与__call__方法

Python类装饰器中的__get__与__call__方法原文地址:Python类装饰器中的__get__与__call__方法

wwwcomcn123的专栏 780

Python入门基础篇 No.75 —— @property装饰器_getter和setter方法

Python入门基础篇 No.75 —— @property装饰器_getter和setter方法 文章目录Python入门基础篇 No.75 —— @property装饰器_getter和setter方法前言一、@property 装饰器总结 前生篇:私有属性和私有方法(实现封装) 前言 一、@property 装饰器 @property 可以将一个方法的调用方式变成“属性调用”。下面是一个简单的示例,让大家体会一下这种转变: 代码演示: # 简单测试@property class Empl

成长的Offer 916

【每天学习一点点】通过使用@property装饰器来创建一个属性的getter和setter方法

property装饰器:这个装饰器将一个方法转换为相同名称的只读属性。在这里,reset_state方法被转换为一个属性,你可以通过实例访问它(如instance.reset_state),而不需要调用它(如instance.reset_state())。@reset_state.setter装饰器:这个装饰器允许你定义一个方法来设置reset_state属性的值。这样,当你尝试给reset_state赋值时(如instance.reset_state = new_value),这个方法会被调用。

Logintern09的博客 349

使用@property修饰器简化getter和setter

@property -->getter方法 @XX.setter -->setter方法 class User(object): def __init__(self): self.__username = None # 私有对象属性 self.__password = None # 私有对象属性 @property # getter def username(...

dycjnb的博客 314

Python 中的函数装饰器:理解 @property、Getter 和 Setter 方法

这使得该属性更难直接访问,尽管它仍然不是完全私有的 - python 在内部通过在属性前面加上 _classname 来重命名该属性,使其只能通过其损坏的名称(例如 _product__price)进行访问。在许多编程语言中,私有变量用于确保对象内的敏感数据在未经适当授权的情况下无法直接访问或修改,从而保留给定对象的完整性。在此示例中,getter (get_price()) 和 set_price()) 提供了一种访问和修改 _price 属性的方法,同时执行某些规则(例如确保价格不为负)。

withkai44的博客 1723

python中@property的作用,python中@property的作用和getter setter的解释

@property作用:python的@property是python的一种装饰器,是用来修饰方法的。我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改。1.修饰方法,让方法可以像属性一样访问。class DataSet(object):@propertydef method_with_p...

weixin_39518840的博客 279
上一篇: 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?
下一篇: 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值