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

Python @property原理解析和用法实例 这篇文章主要介绍了Python @property原理解析和用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在我们定义数据库字段类的时候,往往需要对其中的类属性做一些限制,一般用get和set方法来写,那在python中,我们该怎么做能够少写代码,又能优雅的实现想要的限制,减少错误的发生呢,这时候就需要我们的@property闪亮登场啦,巴拉巴拉能量…….. 用代码来举例子更容易理解,比如一个学生成绩表定义成这样 class Student(object): def get_score(self): return sel 立即下载

上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明。
一、    案例说明
本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只定义了长度属性的操作。包括三个完整的装饰器,如果大家想试一下少一个操作方法的装饰器,可以直接把对应装饰器去除即可。

二、    案例代码
1.    定义类Rectangle

class Rectangle():
    def __init__(self,length,width): self.width,self.length = width,length
   
    @property  #定义getter装饰器
    def len(self):
        print("execute getLen")
        return self.length
       
    @len.setter   #定义setter装饰器
    def len(self,length):
        print("execute setLen")
        self.length=length
       
    @len.deleter  #定义deleter 装饰器
    def len(self):self.length=0

2.    定义实例对象并执行相关操作(交互模式下执行)

rect = Rectangle(5,3)
rect.len  #获取长方形的长
rect.len=10 #设置长方形的长
rect.len  #获取长方形的长
del rect.len #删除长方形的长

从下面的执行截图可看出,相关操作都是调用对应的方法执行,只是方法的名字必须是固定的属性名。
三、    案例截图
 
四、    异常情况的代码和截图
与《第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?》一样,老猿也测试了属性名相同时的异常情况,证实该异常情况与7.25节介绍的异常情况完全一样。相关代码和执行的部分截图如下:

#property装饰器设置与类变量的同名属性 
class Rectangle():
    def __init__(self,length,width): self.width,self.length = width,length
   
    @property
    def length(self):
        print("execute getLen")
        return self.length
       
    @length.setter    
    def length(self,length):
        print("execute setLen")
        self.length=length
    @length.deleter
    def length(self):self.length=0
       
rect = Rectangle(5,3)

执行截图:

通过以上代码的执行在此验证了属性名不能与实例变量同名,除非是使用一个本身没有任何数据操作的实例变量。
本节老猿结合案例详细介绍了property装饰器的使用,并举例说明装饰器定义的属性不能和类的实例变量同名,否则可能会引发异常。截止到本节,类和类型的基础知识讲了大部分,还有部分后面再开单独章节介绍,本章到此结束。
老猿Python(https://blog.youkuaiyun.com/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

更新3ds时和用读卡器读取传输文件操作不当导致的tf卡损坏无法读取需要格式化时出现的问题以及不想丢失文件并且修复的详细解决方法 前言: 不小心按了同意更新而且tf/sd卡损坏导致了3ds打开后都是出现 Anerror has occurred:(红色的) Failed to apply 1 FIRM patch(es). Press any button to shotdown 这样的画面,按了任意键后就关机,我找了很多资料和大佬的回答解决了这些问题,现在记录一下。 一.不小心按了更新导致上述的画面 原因:是因为系统升级了,但是里面的Luma3DS还没有更新,属于是更新了但没有完全更新的状态。 **修复方法** 1.首先请按 阅读详情

相关推荐

抖音a_bogus参数逆向避坑指南:从环境检测到XHR请求的全流程解析

本文详细解析了抖音a_bogus参数在v1.0.1.19版本下的逆向工程全流程,重点介绍了如何通过PyV8Env框架进行有效的补环境操作,以绕过严格的环境检测。内容涵盖从环境初始化、关键事件触发到模拟XHR请求获取签名的完整步骤,并提供了可运行的Python代码示例和常见检测点的避坑指南,帮助开发者稳定生成有效的a_bogus参数。

tech5的博客 600

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

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

qq_41619571的博客 9409

服务器被攻击植入挖矿病毒,CPU占用高问题排查处理(.systemd-service.sh)

客户服务器遭攻击,部署的应用服务经常性被停止,服务器CPU占用居高不下,top查看如下: 可以看到第一个bash任务,占用cpu近400%,非正常的应用程序和脚本任务,多半是被植入了木马信息。 查看该进程的符号连接,发现已经是被删除的状态 /usr/bin/-bash (deleted),无法查看其启动程序的信息 查看定时任务:cat /etc/crontab,发现都是正常的应用程序定时脚本 又用 crontab -l 查看了一下,发现了异常定时任务如下,同top里的异常任务一致...

gottst0113的博客 2119

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

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

weixin_30271335的博客 513

在 Dify 平台部署一个 知识库问答(KBQA) 工作流

加强检索约束,Prompt 加限制(“仅基于知识库回答”):启用缓存,使用轻量级 LLM(如 Mistral-7B)(OpenAI Embedding、M3E、BGE等)(支持 PDF/TXT/Markdown/Word)(GPU/CPU 资源,用于向量数据库和模型推理)企业内部文档(PDF/Word/Excel)网页爬取数据(Markdown/HTML)分块大小(太小→信息碎片化,太大→噪声多)相似度阈值(太高→漏检,太低→噪声多)(是否返回正确文档)结构化数据(数据库/API)

井底小蛙的博客 1520

高斯-约当(Gauss-Jordan)消元法——c++代码实现

具体算法的详细原理请参照此篇博客:高斯-约当(Gauss-Jordan)消元法下面是具体c++代码,不保证程序最优化,提供一个可行的程序,供大家改进,同时感谢大家提意见。——大神勿喷呀,我是一个小菜鸟~void Guss_Jordan(int n,double *a)//阶数n 系数矩阵a { double*a_temp = new double[n*n * 2];//a与单位矩阵的组合

zwz的学习之路 6873

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

Python使用property函数和使用@property装饰器都能定义属性的get、set及delete的访问方法,他们的相同点主要如下三点: 1、定义这些方法后,代码中对相关属性的访问实际上都会触发这些定义的方法,从而实现应用代码用简单方法访问属性,但实际属性的访问逻辑由背后定义的方法控制,本质上二者的功效是相同的; 2、二者在定义方法上,都支持可以选择性的设置其中的一个、两个或三个操作类型...

老猿Python 2798

科研——BIBM论文修改和提交

BIBM的相关操作流程汇总

Blackoutdragon的博客 6688

python 使用@property

在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑。为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数: class Student(...

weixin_33787529的博客 602

深度学习驱动的股票波动率预测:LSTM和Transformer模型的实战解析

股票市场的波动率一直是金融领域关注的焦点之一。波动率预测对于风险管理、期权定价和资产配置至关重要。深度学习模型,如长短时记忆网络(LSTM)和Transformer,已经在时间序列数据分析领域取得了显著的成就。本博客将向您展示如何使用这两种深度学习模型来进行股票波动率预测,提供清晰的思路和相应的Python代码,以帮助您理解和应用这一重要任务。

斌擎科技 974

【GEOS-Chem模拟教程第二期下】全球生物质燃烧 GFAS 数据配置

本博客详细介绍全球生物质燃烧 GFAS 数据下载及在 GEOS-CHEM 模型中的配置

WW、forever的博客 1394

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

上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明。一、 案例说明本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只定义了长度属性的操作。包括三个完整的装饰器,如果大家想试一下少一个操作方法的装饰器,可以直接把对应装饰器去除即可。二、 案例代码1. 定义类Rectangleclass Rectangle()...

weixin_39801613的博客 149

Kubernetes(K8s)从入门到精通系列之一:一篇文章了解K8s全部核心知识点

Kubernetes(K8s)从入门到精通系列之一:一篇文章了解K8s全部核心知识点

zhengzaifeidelushang的博客 849

python:@property装饰器

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

珂鸣玉的博客 412

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

python装饰器 property_python中的property装饰器

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

weixin_39679091的博客 182

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

property

一、property @property 把一个方法 伪装成一个属性 1.属性的值 是这个方法的返回值 2.这个方法不能有参数了 呐:(圆的小栗子) from math import pi class Circle: def __init__(self,r): self.r = r @property def area(self):

sunv_lx的博客 344

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python-3 property的使用

@property 装饰过后的方法不再是可调用的对象,可以看做数据属性直接访问。 成人的BMI数值: 过轻:低于18.5 正常:18.5-23.9 过重:24-27 肥胖:28-32 非常肥胖, 高于32 体质指数(BMI)=体重(kg)÷身高^2(m) EX:70kg÷(1.75×1.75)=22.86 class People: def __init__(self, name, weight, height): self.name = name s

weixin_49729516的博客 151

python property装饰器原理_实例讲解Python编程中@property装饰器的用法

取值和赋值class Actress(): def __init__(self): self.name = 'TianXin' self.age = 5类Actress中有两个成员变量name和age。在外部对类的成员变量的操作,主要包括取值和赋值。简单的取值操作是x=object.var,简单的赋值操作是object.var=value。>>> actress = Actres...

weixin_42608299的博客 435

ES6类的属性自定义存取值——getter、setter访问器理解

get关键字特性 get关键字可在对象内部使用,可为此对象创造一个伪属性。先看下面一个例子: let obj = { get name(){ let a =10; return a; } } console.log(obj.name); //10 ...

qq_41619567的博客 738

【Python进阶篇】python之函数的类的属性

一、属性   如果你已经了解Python类中的方法,那么属性就非常简单了,因为Python中的属性其实是普通方法的变种。 对于属性,有以下三个知识点: 属性的基本使用 属性的两种定义方式 1、属性的基本使用 # ############### 定义 ############### class Foo: def func(self): pass # 定...

Jian Sun_的博客 5453

JS 对象的访问器属性setter getter函数

访问器属性不包含 数值  ,包含setter和getter函数 var book={ _year:2004, //只能通过对象方法访问的属性 edition:1 }; //IE9+,Firefox4+,Safari5+,Opera12+,Chrome Object.defineProperty(book,"year",{ get: function(){ return this._year

zxcasd753651的博客 1542

介绍Python的@property装饰器的用法_python_脚本之家

介绍Python的@property装饰器的用法_python_脚本之家 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑。为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_s

一名普通码农的菜地 1914

Python:使用property装饰器将方法转为属性

最近看了一下python,学习了点基础。本文就是在学习python过程中的产物之一。一来作为笔记方便日后参阅,二来写出来分享给python初学者。由于笔者的工作语言是java,因此可能回经常将python于java比较。 一、property用途 有时候在写程序中某些变量是由特殊的范围值的,就好像people中的age属性:年龄一样,总不可能是负数的吧。那么就要对该变量进行检查。一般的做法就是

javy_codercoder的博客 2556

Python属性访问和描述符,property装饰器

Python属性访问和描述符,property装饰器 一、属性访问 1.一个实例 看下面这个示例代码 class Animal(object): run = True class Dog(Animal): fly = False def __init__(self, age): self.age = age def sound(self): return "wang wang~" if __name__ == '__main__': #

nth2000的博客 282

[转载]Python使用@property装饰器--getter和setter方法变成属性

原贴:为什么Python不需要getter和setter getter 和 setter在java中被广泛使用。一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和setter函数以供外部使用。 这样做的好处是属性的具体实现被隐藏,当未来需要修改时,只需要修改getter 和 setter即可,而不用修改代码中所有引用这个属性的地方。可能做的修改为: 在获...

weixin_30346033的博客 231
上一篇: 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
下一篇: 第7.28节 《Python类、类型、协议》章节总结
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、付费专栏及课程。

余额充值