# دکوراتور property پایتون چیست؟
با استفاده از دکوراتور property میتونید کاری کنید که متدهاتون به شکل property قابل دسترسی باشن. یعنی بدون نیاز به پرانتز بتونید متدهاتون رو صدا بزنید. شما میتوانید از دکوراتور property پایتون برای مشخص کردن setter و deleter نیز استفاده کنید.
در زیر متد name به عنوان یک property اعلام می شود. این متد باید مقدار ویژگی را برگرداند.
class Student:
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
در بالا، دکوراتور @property روی متد name() اعمال شد. متد name() مقدار ویژگی name__ را برمیگرداند. بنابراین، اکنون میتوانیم از متد name() به عنوان property برای بدست آوردن مقدار ویژگی __name استفاده کنیم، همانطور که در زیر نشان داده شده است.
>>> s = Student('Steve')
>>> s.name
'Steve'
# دکوراتور property.setter پایتون
در بالا، متد name() را به عنوان یک property تعریف کردیم. ما فقط می توانیم به مقدار ویژگی name دسترسی داشته باشیم اما نمی توانیم آن را تغییر دهیم. برای تغییر مقدار ویژگی، باید متد setter را برای ویژگی name با استفاده از دکوراتور @property-name.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 باید دارای آرگومان value باشد که بتوان از آن برای تخصیص ویژگی خصوصی زیرین استفاده کرد. اکنون میتوانیم مقدار ویژگی را بازیابی و تغییر دهیم، همانطور که در زیر نشان داده شده است.
>>> s = Student('Steve')
>>> s.name
'Steve'
>>> s.name = 'Bill'
'Bill'
# دکوراتور property.deleter پایتون
از دکوراتور property-name.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
دکوراتور property-name.deleter@ زمانی فعال خواهد شد که یخواهید یک ویژگی را با کلمه del حذف کنید. به محض اینکه یک ویژگی را حذف کردید، دیگر نمیتوانید به آن دسترسی داشته باشید:
>>> 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'
ارسال نظر