Menu
CoddyTech

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

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

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

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

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     # משתמש במתודת ההגדרה עם אימות
print(person.age)   # משתמש במתודת האחזור

# פעולה זו תגרום לשגיאה:
# 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: צרו מופע של טמפרטורה ב־25°C
temp = None  # החליפו במופע אמיתי של Temperature

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

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

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

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

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

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