Properties یک راه برای سفارشی کردن دسترسی به ویژگی های نمونه فراهم می کند. آنها با قرار دادن دکوراتور املاک در بالا یک روش ایجاد می شوند، بدین معنا که هنگامی که نمونه به همان نامی که روش دسترسی دارد، به آن متصل شود، روش به جای آن نامیده می شود. یک استفاده مشترک از یک ملک این است که یک ویژگی را فقط خواندنی بسازیم. مثال:
class Pizza:
def __init__(self, toppings):
self.toppings = toppings
@property
def pineapple_allowed(self):
return False
pizza = Pizza(["cheese", "tomato"])
print(pizza.pineapple_allowed)
pizza.pineapple_allowed = True
خروجی:
>>>
False
AttributeError: can't set attribute
>>>
خواص را می توان با تعریف توابع setter / getter تنظیم کرد. تابع seter مقدار ارزش متناظر را تعیین می کند. دریافت کننده ارزش می گیرد. برای تعریف یک تنظیم کننده، شما باید از دکوراتور با همان نام مالکیت استفاده کنید، به دنبال یک نقطه و کلمه کلیدی setter. همین امر برای تعریف توابع getter نیز کاربرد دارد. مثال:
class Pizza:
def __init__(self, toppings):
self.toppings = toppings
self._pineapple_allowed = False
@property
def pineapple_allowed(self):
return self._pineapple_allowed
@pineapple_allowed.setter
def pineapple_allowed(self, value):
if value:
password = input("Enter the password: ")
if password == "Sw0rdf1sh!":
self._pineapple_allowed = value
else:
raise ValueError("Alert! Intruder!")
pizza = Pizza(["cheese", "tomato"])
print(pizza.pineapple_allowed)
pizza.pineapple_allowed = True
print(pizza.pineapple_allowed)
خروجی:
>>>
False
Enter the password: Sw0rdf1sh!
True