יצירת מופעים של מחלקות
יצירת מופעים של מחלקה בפיתון היא פשוטה למדי. כל שעליך לעשות
הוא להשתמש בשם המחלקה באילו היתה פונקציה, ולהעביר כפרמטרים את אותם
הארגומנטים שמתודת __init__ מצפה לקבל. הערך שמוחזר מקריאה זו הוא
מופע חדש של המחלקה.
>>>
import fileinfo
>>> f =
fileinfo.FileInfo("/music/_singles/kairo.mp3")
>>>
f.__class__ <class
fileinfo.FileInfo at 010EC204>
>>>
f.__doc__ 'base class
for file info' >>>
f {'name':
'/music/_singles/kairo.mp3'}
העבירו את הסמן מעל השורות
המסומנות לקבלת הסברים
כאן אנו יוצרים מופע חדש של המחלקה
FileInfo (המוגדרת בתוך המודול fileinfo) ומציבים אותו במשתנה f. אנו
מעבירים פרמטר אחד שיועבר בתור ארגומנט filename למתודת __init__ של
המחלקה.
לכל מופע של מחלקה ישנו מאפיין __class__ המכיל את המחלקה של המופע. מלבד שם
המחלקה הוא מכיל את מיקום הגדרת המחלקה בזיכרון (ערך זה יכול להיות
שונה אצלך על המחשב). מידע נוסף על האוביקט נמצא במאפיינים כדוגמת
__name__ ו- __bases__.
ניתן לגשת למחרוזת התיעוד של המחלקה באותה דרך בה ניגשים
אליה בפונקציות.
זוכרים מה עשתה המתודה __init__ עם הארגומנט שהועבר אליה?
ובכן, זוהי תוצאת ההשמה.
אם כן, הגדרת מופע של מחלקה בפיתון הוא פשוט ואחיד – אין
בפיתון הגדרות מופעים בעזרת אופרטור new כפי שמשתמשים בו בשפת C++.
בנוסף, לאחר שיצרנו מופע, אין טעם לדאוג למחיקתו – כיון שהוא
משוחרר אוטומטית על ידי פיתון עם הריסת הקונטקסט בו הוגדר המשתנה. בקצרה – כמעט ואי אפשר ליצור
דליפות זכרון בפיתון.
המנגנון בו פיתון משתמשת למנוע דליפות זכרון נקרא "איסוף זבל"
והוא מושתת על "ספירת התיחסויות" למופעים של אוביקטים. ברגע שמספר
המשתנים שמתייחסים למופע מסוים מגיע לאפס, המופע נמחק מהזכרון. העקרון
הוא "אם אף-אחד לא מסתכל על זה, זה לא קיים". מנגנון זה אינו פשוט כלל
ועיקר (תארו לעצמכם, למשל, את הסיבוך שנוצר בהגדרת שני אוביקטים
שצביעים זה על זה) אך כיון שהוא ממומש על ידי פיתון, הוא חוסך מאיתנו
דאגות ו"כאבי ראש" בגלל עניני הקצאה ושחרור
זכרון.
|