Python 属性装饰器——@property

@property装饰器是 Python 中用于属性()函数的内置装饰器。 在类中的任何方法上使用@property装饰器,将该方法用作属性。

您可以使用以下三个装饰器来定义属性:

  • @property:将方法声明为属性。
  • @ 。setter:为将值设置为属性的属性指定 setter 方法。
  • @ 。deleter:将 delete 方法指定为删除属性的属性。

申报财产

下面将方法声明为属性。此方法必须返回属性值。

Example: @property decorator

class Student:

    def __init__(self, name):
        self.__name = name

    @property
    def name(self):
        return self.__name 

上图,@property装饰器应用于name()方法。 name()方法返回私有实例属性值__name。 因此,我们现在可以使用name()方法作为属性来获取__name属性的值,如下所示。

Example: Access Property decorator

>>> s = Student('Steve')
>>> s.name 
'Steve' 

属性设置器

上面,我们将name()方法定义为一个属性。我们只能访问name属性的值,但不能修改它。 要修改属性值,我们必须使用@property-name.setter装饰器为name属性定义 setter 方法,如下所示。

Example: Property Setter

class Student:

    def __init__(self, name):
        self.__name=name

    @property
    def name(self):
        return self.__name

    @name.setter   #property-name.setter decorator
    def name(self, value):
        self.__name = value 

上面,我们有两个name()方法的重载。一个是 getter 方法,另一个是 setter 方法。 setter 方法必须具有可用于分配给基础私有属性的值参数。 现在,我们可以检索和修改属性值,如下所示。

Example: Access Property

>>> s = Student('Steve')
>>> s.name 
'Steve'
>>> s.name = 'Bill'
'Bill' 

属性删除

使用@property-name.deleter装饰器定义删除属性的方法,如下所示。

Example: Property Deleter

class Student:
    def __init__(self, name):
        self.__name = name

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, value):
        self.__name=value

    @name.deleter   #property-name.deleter decorator
    def name(self, value):
        print('Deleting..')
        del self.__name 

当您使用关键字del删除属性时,将调用删除程序,如下所示。一旦删除属性,就不能使用同一实例再次访问它。

Example: Delete a Property

>>> s = Student('Steve')
>>> del s.name 
Deleting.. 
>>> s.name 
Traceback (most recent call last):                              
File "<pyshell#16>", line 1, in <module>            
    p.name                                                      
File "C:\Python37\test.py", line 6, in name                     
    return self.__name                                          
AttributeError: 'Student' object has no attribute '_Student__name' 

原创文章,作者:0ZG8Y,如若转载,请注明出处:https://www.506064.com/n/127718.html

汽车小知识 小米SU7 今日油价 油耗计算器 电耗计算器 购置税计算器 贷款计算器 保险计算器 交通违章代码 体育新闻
(0)
0ZG8Y0ZG8Y
上一篇 2024-10-03 23:16
下一篇 2024-10-03 23:16

相关推荐

  • 包含phpflag的词条

    本文目录一览: 1、php如何循环反序列化? 2、php小白 请问这里的$flag是什么意思,起到什么作用? 3、PHP传递一个Flag标志给Android客户端用来判断注册的时候…

    编程 2024-10-04
  • solidworks默认模板怎么设置,solidworks默认模板

    本文目录一览: 1、solidworks默认模板更改时点省略号进不去 2、怎么设置某一个工程图模板的solidworks标注样式,以后每次用这个模板出图时都是默认样式? 3、sol…

    编程 2024-11-12
  • 以 Python 日志为中心的开发实践

    Python 是一门广泛用于开发的高级编程语言,其强大的日志功能是让开发者更加便捷进行调试的关键所在。不同的应用场景需要不同的日志系统,Python 提供了一系列完善的日志库和方便…

    编程 2024-11-14
  • Java String方法——startswith

    Java是一门面向对象的编程语言,广泛应用于网络应用和企业解决方案开发。在Java中,String类是非常重要和常用的类,它提供了丰富的方法来操作字符串。其中之一就是startsw…

    编程 2024-10-04
  • Logistic函数的自然指数形式计算方法及应用

    一、Logistic函数的定义及性质 Logistic函数是一种非线性连续函数,具有S形曲线,常被用来模拟一些生物和社会现象。它的自然指数形式如下: def logistic(x)…

    编程 2024-10-04
  • 鉴定令牌操作错误:从多个方面进行分析和阐述

    一、鉴定令牌操作错误原因 在防范网络攻击的过程中,鉴定令牌扮演着重要的角色。但是,鉴定令牌使用不当,也会引发问题。鉴定令牌操作错误的主要原因包括: 1. 鉴定令牌秘钥泄露:鉴定令牌…

    编程 2024-10-04
  • Latex公式换行等号对齐

    一、Latex公式换行 在Latex中,公式换行可以使用\newline和\\\进行换行,其中\newline表示新建一行,但不产生缩进,而\\\则表示新建一行并产生缩进。 例如,…

    编程 2024-11-07
  • TCP报文格式详解

    一、TCP协议简介 TCP是传输控制协议(Transmission Control Protocol)的缩写,是互联网协议TCP/IP协议簇的一部分,是一种面向连接的、可靠的、基于…

    编程 2024-10-04
  • java使数组像矩阵一样输出(Java输出矩阵)

    本文目录一览: 1、java 定义一个并二维数组矩阵输出 2、在java中如何用类和对象的方法来实现矩阵的输出 3、java 中任意输入一个二维数组,然后再以矩阵的形式输出此数组。…

  • Java内部类

    Java内部类是在一个类的内部定义的另外一个类,可以理解为类中的一个成员,与属性和方法处于同一层级。Java内部类是Java语言的特性之一,具有许多优秀的特性和应用场景。 为什么使…

    编程 2024-10-03

发表回复

登录后才能评论