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
删除属性时,将调用删除程序。删除属性后,将无法使用相同的实例再次访问该属性。
本文内容总结: