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

Python学习之-Property详解 在Python中,property 是一种内置的装饰器,它可以将类的方法转换为属性,让你在不改变类接口的情况下添加额外的逻辑,如输入值的验证、取值的计算等。property 可以作为一种方式让你的类接口保持清晰且易于使用。property 装饰器最常见的应用场景是将类的属性封装起来,提供getter 和 setter 方法。这种方式的原因是,你可以对属性赋值或者取值的代码进行控制,而不是直接暴露属性。 阅读详情

       最近看了一下python,学习了点基础。本文就是在学习python过程中的产物之一。一来作为笔记方便日后参阅,二来写出来分享给python初学者。由于笔者的工作语言是java,因此可能回经常将python于java比较。

一、property用途

有时候在写程序中某些变量是由特殊的范围值的,就好像people中的age属性:年龄一样,总不可能是负数的吧。那么就要对该变量进行检查。一般的做法就是在使用该变量之前检查一下是否在合理范围内,如果不在合理的范围内,就给出相应的提示,或抛出相关的错误。而另一种是在给该变量赋值之前进行相关检查,如果在合理范围内就对该变量赋值。
以上是两种常见的检查,今天要说的不是以上两种检查之一,而是赋值的时候检查。这样的写法很简单,无非是使用该变量的setter对变量赋值,相关的检查逻辑在settter。这样的做法不错,但是赋值过于麻烦,总要以这样的方式进行赋值:
people.setAge(60)
远没有以下这种赋值方法来得方便:
people.age=60

这种赋值不但方便而且简单明了。
但是说好的赋值的时候检查就做不到了,有没有一种方法可以既检查,赋值的时候又简单呢?
在python中有一种装饰器可以做到这种效果,该装饰器就是:property

二、用法

property的用法很简单,也是基于getter和setter。
property可以将getter和setter转化成属性。



class People(object):
    @property
    def getAge(self):
        return self.age
    @age.setter
    def setAge(self, age):
        if age<0:
            raise ValueError('age error!')
        else:
        self.age = age

在getter上加上property装饰器之后就可以直接以这种方式people.age获取age的值,settler的做法差不多只是装饰器的写法不一致而已将【变量名】.setter写在setter上面即可完成,从此设置age不用使用setter那么麻烦了,可以直接使用people.age=60这样的写法啦


Python中的property装饰器:深入解析与实用示例 通过使用getter、setter和deleter方法,我们可以在不破坏封装性的前提下,提供对类内部数据的访问和修改。其中,getter方法用于获取属性值,setter方法用于设置属性值,deleter方法用于删除属性,而doc则是一个可选的文档字符串。装饰器是一个内置的装饰器,用于在新式类中返回属性值。数据验证:在setter方法中,我们可以添加数据验证的逻辑,确保设置给属性的值符合我们的要求。通过这种方式,我们可以确保外部代码只能通过我们提供的接口来访问和修改私有变量的值,从而保持类的封装性和安全性。 阅读详情

相关推荐

神奇的Python property装饰器:1行代码让Python方法秒变属性

本文详细介绍了如何用property装饰器的将Python方法变成属性,以及再变成可写和可删除的属性,当然,更重要的是详细分析了property装饰器的原理,让读者不仅可以知其然,还可以知其所以然。

一个被知识诅咒的人 3779

Python @property 装饰器

python @property 装饰器的一点点学习记录。

weixin_44686138的博客 843

C++中const和指针*的组合问题

今天在复习> 章节7.3的时候想到以前做的一个题,const和指针运算符*的若干种组合的合法性和意义问题,有点混淆,所以写了一个测试代码来验证一下,简单明了,一目了然。如果有什么遗漏的话欢迎指出。 首先是在Ubuntu14.04.1下用gcc 4.8.4编译运行的结果,编译器报错信息都附加在对应语句后面的注释里 /* * Note : Test for the combinations of

theColdOne的专栏 1080

Python @property 装饰器深度使用教程

它将类方法转换为类属性访问接口。是 Python 内置的。

YAnt的博客 1028

【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)

【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)

weixin_57514792的博客 1103

Pseudobulk与FindMarkers单细胞差异基因分析实战对比

本文深入对比了单细胞差异基因分析中Pseudobulk与FindMarkers两种主流方法。通过实战演示,详细解析了二者在底层逻辑、数据准备、分析流程及结果解读上的核心差异,并提供了基于不同生物学问题与数据特点的选择策略,帮助研究者做出更精准的分析决策。

weixin_29218963的博客 332

@property 装饰器的作用和用法

在复现别人的代码时看到了在定义方法前一行有一个@property,对此感到很疑惑,于是上网查阅了它的用途,并做出总结。

weixin_44883789的博客 2388

软件测试工程师最常用的Linux系统命令大全(汇总)

cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。

1330

【Python】调用和引用

调用和引用的区别与用法

buffedon的博客 289

【LLM技术全景】规模定律与模型演进:为什么模型越大越强?

规模定律性能 ∝ 参数量^N性能 ∝ 数据量^M性能 ∝ 计算量^L其中 N, M, L 是小于1的正数(通常0.05~0.15)关键观察损失与规模的关系呈幂律(不是线性,也不是对数)三个要素(参数、数据、计算)需要协调增长只增加其中一个要素,收益会边际递减规模定律(Scaling Law):1. 模型性能与参数量、数据量、计算量呈幂律关系2. Kaplan定律(2020):参数量是主要因素3. Chinchilla定律(2022):数据和参数同等重要,最优比例1:20。

专注:太空算力、AI infra、异构调度、大模型成本工程 495

Codex 100个真实案例 - 全系列总结与Codex最佳实践全解析

历经100个案例的淬炼,我们终于来到了终点!本篇是整个系列的压轴之作——全面回顾100个案例的分类统计、提炼Codex使用的核心技巧和最佳实践、总结Prompt工程的精华要点、剖析常见错误及解决方案、展望AI编程的未来趋势,并为不同水平的读者规划学习路径。这不仅是一篇总结,更是一本Codex实战手册!

yueyeguzhuo的专栏 135

Python 中 property() 函数及 @property 装饰器的使用

Python 中 property() 函数及 @property 装饰器的使用 文章目录Python 中 property() 函数及 @property 装饰器的使用0. 参考资料1. property 应用场景 0. 参考资料 Python property() 函数 使用@property Python进阶-----property用法(实现了get,set,delete三种方法) ...

团子大圆帅的博客 4万+

YOLOv5 实现 10 种热力图可视化方式教程 | GradCAM XGradCAM ScoreCAM LayerCAM HiResCAM EigenCAM....

基于梯度计算类激活图,是最经典的热力图生成方法之一。Grad-CAM的改进版,通过引入梯度加权的方式,提高了热力图的定位精度。基于类别的得分计算类激活图,对噪声具有更强的鲁棒性。基于特定层的特征图计算类激活图,可以灵活选择不同的层进行分析。通过上采样将低分辨率的特征图恢复到原始图像大小,提高了热力图的分辨率。基于特征图的特征向量进行PCA降维,得到更简洁的热力图。对Grad-CAM的进一步改进,通过加权平均的方式,提高了热力图的质量。基于积分梯度的方法,可以解释模型对输入的每个特征的贡献。

weixin_39818775的博客 2374

Python自学 - property装饰器(方法变成属性)

property:将方法转换为只读属性。:为属性添加可写功能,并添加验证或修改逻辑。:为属性添加删除逻辑。避免在@property方法中进行复杂计算,因为它可能会被频繁调用,影响性能。对于需要频繁修改的属性,要谨慎使用property装饰器,因为它可能会使代码难以理解。作者声明:本文用于记录和分享作者的学习心得,部分内容或示例来源豆包AI,由于本人水平有限,难免存在表达错误,欢迎交流和指教!

tyysoft的专栏 1086

Android实现自动输入文本效果 (附完整源码)

Android实现自动输入文本效果 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 414

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

老猿Python 2798

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

property属性

property属性

IT之一小佬的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python的property属性的使用方法

property property 属性 class 类名: @property def 方法名(silf): return 返回值 对象 = 类() 变量 = 对象.方法名 print(变量) 注: 只能有一个参数self。注:两个参数则需要传值,但property的调用方法-对象.方法名默认不传值 方法当做属性调。注:若使用对象名.方法名()...

weixin_44850984的博客 731

深入Python3中property属性装饰器

property类返回property属性,其语法格式: #fget是获取属性值的函数。fset是用于设置属性值的函数。fdel是用于删除属性值的函数。并且doc为属性对象创建文档字符串。 classproperty(fget=None,fset=None,fdel=None,doc=None) 一个典型的用法是定义一个托管属性 x: class C: ...

薛定谔的猫-前端领域 760

Python面向对象:属性装饰器property的使用

《Python面向对象:属性装饰器property的使用》深入讲解了Python中property装饰器的核心概念与应用。文章首先介绍了property的基本定义及其重要性,强调它能提升代码质量、简化属性访问控制。通过实际代码示例展示了property的实现方法,包括基础用法和面向对象编程中的应用场景。文章还详细解析了property的技术原理,比较了传统getter/setter方法与property装饰器的区别。最后,提供了常见问题解决方案,如环境配置错误和运行时编码问题。本文适合Pytho

未来 95% 的 AI 应用将变得隐形,广泛融入日常生活。 2014

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

我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@property装饰器也可以实现同样的功能,但@property装饰器要求必须定义getter装饰器来实现属性访问的get方法,而property函数说明文档对此没有要求,只要求fget、fset、fd...

老猿Python 2408

Python装饰器之property()详解

1. 何为装饰器? 官方定义:装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 Python中总共包括三个内置装饰器: ① staticmethod ② classmethod ③ property 2. 属性函数 property() 浅谈 2.1 为什么要使用 property? 通常

Alex 1058

python3中property属性的使用方法

作用: 使一个方法调用起来像调用属性一样,简化调用者在获取数据的流程,使代码更整洁。 两种方式实现property属性 1、装饰器:在方法上应用装饰器 python2中只有@property一种修饰方法 python3中有@property、@方法名.setter、@方法名.deleter三种修饰方法,分别实现获取、修改和删除 class Bus: def __init__(s...

Answer3664的博客 603

python的property属性

1、什么是property属性 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法 # ############# 定义 ############## class Foo: def fun(self): pass # 定义property属性,必须返回一个值 @property def prop(self): return 100 # ############# 调用 ################ foo_obj = Foo

weixin_42137701的博客 880

Python--property属性装饰器

property是内置的装饰器,用于创建特定属性的getter、setter和deleter方法。property装饰器可以帮助我们实现封装性和数据的访问控制。(建议使用)通常与getter、setter和deleter方法一起使用,用于获取、设置和删除特定属性的值。 这样做的好处是,可以隐藏底层实现细节,使得属性的访问更加灵活和可控。示例classCircle: def__init...

清欢无别事 831
上一篇: Android:EventBus的使用 从此消息传递变得简单
下一篇: Android:TextInputLayout的简单使用
javy_codercoder
博客等级 码龄11年 52粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值