דקורטורים של מאפיינים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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. כך אפשר לבצע אימות נתונים ולחשב ערכים, תוך שמירה על תחביר פשוט לגישה למאפיינים.
אתגר
בינוניהשלימו את המחלקה 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: השתמשו באותו פורמט כמו קודםהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםהפרמטר selfמתודותמאפייניםשיטת הבנאי (__init__)חזרה: מחשבון פשוט5פולימורפיזם
בחינה מחדש של דריסת מתודותטיפוסיות ברווזמחלקות ומתודות אבסטרקטיותעיצוב ממשקיםסיכום – מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה לעומת הורשהMixinsמתודות סטטיות ומתודות מחלקהדקורטורים למחלקותמנהלי הקשרתרגלו בעצמכם: קומפיילר Python אונליין