5.2 סטטי הרצאה
סטטי - static¶
- "סטטי" -
staticבOOP זה תכונה שאפשר להביא לממברים של מחלקות שהופכות אותם ל- "גלובליות". מה זה אומר?
שדה סטטי¶
- שדה סטטי הוא שדה שניתן לגשת אילו ישירות מהמחלקה, מבלי לצור אובייקט למחלקה.
- הנה דוגמה להגדרת שדה סטטי "legs" למחלקה Dog שלנו עם ערך ברירת מחדל של 4:
- עכשיו נוכל לגשת ישירות למשתנה הזה גם מבלי ליצור אובייקט חדש:
- כמובן שנוכל לגשת אילו גם עם יצירת אובייקט חדש:
מתודה סטטית¶
- כמו שאפשר להגדיר שדה סטטי אפשר להגדיר גם מתודה סטטית, מתודה סטטית היא מתודה שאפשר לגשת אלייה ישירות, מבלי לצור אובייקט של המחלקה
- ניצור מתודה כזו באמצעות שימוש בדקורטור "staticmethod", המובנה בפייתון בדרך הבאה:
- גישה למתודה סטטית ישירות מבלי ליצור אובייקט:
- הנה קריאה למתודה עם יצירת אובייקט:
- שימו לב: שאנחנו מגדירים מתודה סטטית אין לה "self", הסיבה לכך היא שאנחנו לא יכולים לגשת לשדות דינמים (לא סטטים) מבלי שיצרנו אובייקט, אז זה לא הגיוני שמתודה סטטית תוכל לגשת למשל למשתנים שנוצרים עם init.
- בגלל שאין לנו self במתודה סטטית, גם אם היינו רוצים לכתוב פונקציה סטטית שרק ניגשת לשדה סטטי כמו legs, לא היינו יכולים. בגלל שאין לנו שום דרך, למורות שlegs נוצר גם אם אין אובייקט חדש, וזה בעייתי.
מתודת קלאס¶
- לפעמים אנחנו רוצים לצור מתודות סטטיות שיכולות לגשת לערכים סטטים של המחלקה.
- מתודת קלאס זהה לחלוטין למתודה סטטית, רק שמתודת קלאס יכולה בנוסף לגשת לממברים סטטים במחלקה ובכך היא פחות מוקבלת. אז היא מקבלת פרמטר שדומה לself שנקרא לו cls. (קיצור של class)
- נגדיר מתודת class עם דקורטור - "classmethod", המובנה בפייתון בדרך הבאה:
- כתבנו מתודת קלאס שיכולה לגשת לממברים סטטים, נוכל לגשת אלייה מבלי ליצור אובייקט חדש של המחלקה:
- נוכל לגשת אלייה גם אם יצרנו אובייקט חדש:
טייפ הינטינג לשדות סטטים¶
- כמו לפרמטרים של פונקציות אפשר לעשות type hinting לשדות סטטים של מחלקות
מדוע להשתמש בממברים סטטים?¶
- נשתמש בממברים סטטים כאשר נרצה לכתוב מחלקה שחלק מהממברים שלה ניתן לגשת אליהם כל הזמן, ללא לצור אובייקט חדש.
- בתרגול הבא נראה דוגמאות אמיתיות לשימוש בממברים סטטים.