Menu
Coddy logo textTech

דקורטור מאפיין

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Python של Coddy. שיעור 10 מתוך 64.

המעטר @property מאפשר לך לגשת למתודות כמו לתכונות, ומספק דרך נקייה לקבלת ערכים ולהגדרתם. הדבר שימושי לאנקפסולציה, ומאפשר לך להוסיף לוגיקת אימות או ערכים מחושבים בלי לשנות את הממשק הציבורי של המחלקה שלך.

הנה דוגמה למחלקה המשתמשת ב־@property:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

שימו לב שאנחנו משתמשים ב־self._radius כדי לאחסן את הערך בפועל. אם היינו משתמשים ב־self.radius בתוך המתודה getter, היא הייתה קוראת שוב למתודת getter, והדבר היה מוביל לרקורסיה אינסופית.

צרו מעגל וגשתם למאפיינים:

my_circle = Circle(5)

אפשר לגשת למאפיינים כמו לתכונות רגילות:

print(my_circle.radius)
print(my_circle.area)

פלט:

5
78.53975

שימו לב שלא משתמשים בסוגריים () כשניגשים למאפיינים — הם נראים כמו תכונות, אבל מריצים קוד של מתודה.

הוסף מגדיר כדי לאפשר שינוי של ערכים עם אימות:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @radius.setter
    def radius(self, value):
        if value > 0:
            self._radius = value
        else:
            print("Radius must be positive!")

עכשיו אפשר להגדיר את הרדיוס כמו מאפיין:

my_circle = Circle(5)
my_circle.radius = 10  # משתמש במתודת ההגדרה
print(my_circle.radius)  # משתמש במתודת האחזור

פלט:

10

נקודה מרכזית: @property גורמת למתודות להיראות כמו מאפיינים, ואילו @property_name.setter מאפשרת לך לשלוט באופן שבו ערכים מוקצים, וכך מאפשרת אימות נתונים ואנקפסולציה.

נסו בעצמכם

השיעור הזה לא כולל אתגר קוד.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Python אונליין