שאלה על הפונקציה super

תגיות:

בדוגמא הראשונה שבא רואים את השימוש ב super במחברת, השימוש בה הוא כדי לשנות את רשימת הפרמטרים של הפוצקיה init המקורית של מחלקת Song. לכן גם יש העברת אגרומנטים.
נניח ואני לא מעוניין לשנות את מספר האגרומנטים, אלא רק להוסיף לתת המחלקה attribute.
האם ניתן להשתמש בפונצקיה בצורה כזו?

class Instrumental(Song):
def init(self):
Super.init()
self.is_good = True

או שזה לא יעבוד כי אני חייב איכשהו להעביר את הפרמטרים?

אתה חייב להעביר ל-Song.__init__ את הארגומנטים שהיא דורשת. אם המחלקה שלך מקבלת את כל הארגומנטים האלה ועוד ארגומנטים, אין שום בעיה עם לקרוא ל-super על הארגומנטים המשותפים ואז להגדיר את השאר בעצמך, כפי שעשית עם self.is_good

לייק 1

ובשורה לפני כן
def __init__(self)

חייבים גם את כל הארגומנטים? מרגיש לי כפילות

חייבים, אחרת איך נדע מה הם?

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

למה להגדיר הכול מחדש? לבצע קריאה אחת ל-super עם כל הארגומנטים - שורה אחת ולא הרבה, ואז להוסיף רק את המידע החדש