@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'