properties

  • مدرس: علی بیگدلی
  • تاریخ انتشار: 1402/05/03
  • تعداد بازدید: 144

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