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