הבודק האוטומטי ו-super() בתרגיל היררכיה

בתרגיל היררכיה - הגדרתי מחלקת קובץ ראשית שמקבלת אי אילו משתנים, ומספר מחלקות של סוגי קבצים ספציפיים שיורשים ממנה. בכל אחד מהמחלקות הללו יש פעולת init שאחריה super() בהתאם למה שנלמד,
כשהעתקתי פנימה בדיוק את הפרמטרים שמופיעים בסוגריים של פעולת הinit של המחלקה של הקובץ הראשי. משום מה בכל אחת מהמחלקות שיורשות מהמחלקה הראשית אני מקבלת הערה מהבודק על כך שמופיע שם משתנה שלא הוגדר. בפעולה הראשית יש בדיוק את אותם משתנים אבל אין הערה. מה אני מפספסת?

נסי תמיד לצרף קישור לתרגיל, זה יעזור לי לראות בדיוק את המקרה :slight_smile:

https://solve.pythonic.guru/view/106496
מתי אתה ישן?!?

מדי פעם אני מתחבר לשקע הטענה לכמה שעות, אבל זה לא מונע ממני להמשיך להקליד.
בואי נתייחס רגע לשורה 25. איפה המשתנה creator מוגדר?

2 לייקים

אם הבנתי נכון את השאלה - המשתנה מוגדר בשורה 2, ב-init של מחלקת File שממנה מחלקת Folder יורשת. אם לא הבנתי נכון ואתה שואל איזה ערך מועבר אליה - אז בשורה 122 creator מקבל את self.current_user.

הבנת נכון.
מובן לי מה את מנסה לעשות, אבל הנה הפער:

אם:

  1. יש לך מחלקת B שיורשת ממחלקת העל A,
  2. מחלקת־העל A מגדירה __init__.
  3. תת־המחלקה B מגדירה __init__ משל עצמה.

אזי:

  1. הפרמטרים שהוגדרו בכותרת הפעולה A.__init__ (של מחלקת־העל) אינם מועברים לכותרת הפעולה של B.__init__ (של תת־המחלקה) אוטומטית.
  2. זה קורה כיוון שכשעשית def __init__ ב־B ביקשת לממש את הפעולה מחדש (דרסת את זו שבמחלקת־העל A).
  3. כיוון שיתכן שאת רוצה לממש בתת־המחלקה פעולה עם חתימה שונה מזו של מחלקת־העל, פייתון לוקח את חתימת הפעולה מתת־המחלקה B.

כדי לחוות בעצמך:

  1. נסי ליצור מופע של B (זה יקרא ל־B.__init__, כמובן)

יש לך רעיונות לאיך פותרים את זה? (מותר ורצוי להציץ במחברות).

נראה לי שהבנתי. בdef init עצמו הייתי צריכה להכניס את הפרמטרים (ולא רק בקריאה שמתבצעת עם super בשורה שלאחר מכן), כי כמו שאמרת הם נדרסו ברגע שרשמתי init במחלקה היורשת. זה גרם לי גם להבין שבשתיים מהמחלקות דרסתי לחינם את הinit המקורי (לא היה שום פרמטר שרציתי לשנות\להוסיף…). עוד לא בדקתי אם זה עובד אבל אני מקווה שזה הכיוון.

תודה לך!

לייק 1

יאפ, עלית על כל הנקודות הרלוונטיות :slight_smile:
שימי לב לשימוש ב־**kwargs במחברת הבאה כדי לראות איך תוכלי לחזור מלציין כל פעם את הפרמטרים מחדש.
בכיף ובהצלחה!

לייק 1

משום מה הערה אחת נשארת לי, הפעם על משתנה שהגדרתי ולא עשיתי בו שימוש (שורה 125). עברתי כמה פעמים על יצירת האובייקט ועל המחלקה עצמה ולא הבנתי מה לא בסדר https://solve.pythonic.guru/view/106609

בדיוק זה – למשתנה שהגדרת אין שימוש, אז אין סיבה להגדיר אותו :slight_smile:

על איזה משתנה מדובר, האם מדובר על new_file או על אחד מאלו שמופיעים בסוגריים?

על new_file (הצורה היא new_file = ... ולאחר מכן אין ב־new_file שימוש)

אוקיי פתרתי את זה בכך שמצאתי לו שימוש. הפער היחיד שנשאר לי זה - למה ההערה הופיעה רק על המופע הזה של new_file. הוא הופיע פעמיים לפני כן. בכל מקרה תודה!

מניח (לא בטוח) שזה כי התוכן של התנאים שאחרי מבצע עליו השמה, משמע שכביכול כן היה לו שימוש