Menu
Coddy logo textTech

דקורטורים של מאפיינים

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

מעטרי מאפיינים מאפשרים לך לשלוט באופן הגישה למאפיינים ובאופן השינוי שלהם, תוך שמירה על תחביר פשוט של מאפיינים.

הנה דוגמה למחלקה עם מאחזר מאפיין:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

השתמשו במאפיין כמו בתכונה רגילה:

person = Person("Alice", 30)
print(person.age)

פלט:

30

שימו לב שאתם ניגשים אל age ללא סוגריים, אף על פי שלמעשה מתבצעת קריאה למתודה.

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

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

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

person = Person("Alice", 30)
person.age = 31     # משתמש ב-setter עם אימות
print(person.age)   # משתמש ב-getter

# פעולה זו תגרום לשגיאה:
# person.age = -5   # ValueError: הגיל לא יכול להיות שלילי

פלט:

31

צרו מאפיינים מחושבים שמחשבים ערכים:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property
    def area(self):
        return self.width * self.height

rect = Rectangle(5, 3)
print(rect.area)  # מחשב 5 * 3 = 15

פלט:

15

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

challenge icon

אתגר

בינוני

השלימו את המחלקה Temperature בקובץ temperature.py, שממירה בין צלזיוס לפרנהייט. לאחר מכן השתמשו במחלקה הזאת בקובץ driver.py כדי לבדוק המרות טמפרטורה. עקבו אחר ההערות TODO בשני הקבצים לקבלת הוראות שלב אחר שלב.

הדפיסו כל המרה בפורמט [celsius]°C is [fahrenheit]°F, כאשר ערך הצלזיוס זהה בדיוק לערך שניתן, וערך הפרנהייט כפי ש-Python מחשבת אותו. אל תעגלו את המספרים ואל תעצבו אותם. שתי השורות שה-driver מפיק הן:

25°C is 77.0°F
37.0°C is 98.6°F

נסו בעצמכם

# TODO: ייבאו את המחלקה Temperature מהמודול temperature

# בדקו את המחלקה:
# TODO: צרו מופע של Temperature עם טמפרטורה של 25°C
temp = None  # החליפו במופע אמיתי של Temperature

# TODO: הדפיסו את הערכים גם בצלזיוס וגם בפרנהייט
# TODO: השתמשו בפורמט: "25.0°C is 77.0°F"

# TODO: הגדירו את הטמפרטורה ל־98.6°F

# TODO: הדפיסו שוב את שני הערכים כדי לוודא שההמרה פועלת
# TODO: השתמשו באותו פורמט כמו קודם
quiz iconבחנו את עצמכם

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

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

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