Python 属性装饰器 - @property

2023-09-17 22:17:47

@property装饰器是 Python 中用于property() function的内置装饰器。 @property class中的任何方法上使用修饰器,以将该方法用作属性。

可以使用以下三个decorators来定义属性:

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

声明属性(Declare a Property)

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

示例: @property decorator

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

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

示例: Access Property decorator

s = Student('Steve')
print(s.name)  #'Steve'

属性设置器(Property Setter)

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

示例: 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()方法。一个是吸气剂,另一个是二传手方法。 setter 方法必须具有可用于分配给基础私有属性的值参数。 现在,我们可以检索和修改属性值,如下所示。

示例: Access Property

s = Student('Steve')
print(s.name)  #'Steve'
s.name = 'Bill'
print(s.name)  #'Bill'

属性删除程序(Property Deleter)

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

示例: 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):
        print('Deleting..')
        del self.__name
std = Student('Steve')
del std.name
print(std.name)  #AttributeError

当您使用关键字 del 删除属性时,将调用删除程序。删除属性后,将无法使用相同的实例再次访问该属性。

本文内容总结: