ירושה מרובה - טנק - שאלה על ירושה מobject

תגיות:

היי :slight_smile:
בדוגמא כאן:
image

אשמח לדעת למה מחלקת vehicle ומחלקת weapon יורשות ממחלקת object בצורה שבה זה כתוב כאן (כלומר עם הsuper().init())…
למה בעצם הן לא כתובות כמו מחלקות שעשינו עד עכשיו? האם יש יתרון/סיבה לכתיבה בצורה הזו? מה המחלקות האלה יורשות מobject כשכתבים ככה לעומת אחרת (אמרנו שבכל מקרה המחלקות “יורשות” ממחלקת אובייקט כברירת מחדל לא?)?

תודה מראש!

3 לייקים

שאלה נוספת לגבי ההבדלים בין MIXIN למחלקה מופשטת…

האם אפשר להגיד שMIXIN היא סוג של מחלקה מופשטת? בעצם אין לה מטרה בפני עצמה, לא אמורים ליצור ממנה מופעים, והיא משמשת רק כמחלקה שיורשים ממנה לא?
האם ההבדל בין שתיהן הוא רק ש"לרוב נעשה שימוש ביותר מ־Mixin אחת בעזרת ירושה מרובה"? או שההבדל נובע מזה שהמחלקות שיורשות ממחלקה מופשטת חייבות להשתמש בפעולות שלה?

לייק 1

מצטרפת לשאלה בנושא
האם בדוגמא זו ה MIXIN – ים הם המחלקות Clickable, LargeRectangle?
ולמה כאן במחלקת button לא רשמנו את הפונקציית init ולא אתחלנו את הפונקציה עם הקריאה super(), כמו שעשינו עד כה?

ים ענה על השאלה של הMixin בשרשור אבסטרקט - Mixin

2 לייקים

מה שקרה במקרה הזה, זה בעצם שתי מחלקות שונות , שהיה צורך לחבר אותן, סתם צורך, אז פשוט יצרו מחלקה שלישית שכוללת את שתיהן יחדיו,
זה כמו שתי פונקציות, שבפונקציה אחת עושה חיבור והשניה כפל,
עכשיו לא מכובד ליצור פונקציה שתכלול בתוכה גם את הכפל וגם את החיבור, לכן יש פונקציה שלישית שתאחד אותן…

בעצם הMixIn זה מה שיוצרת מחלקת botton,
לא רשמנו super, init וכו’ כי אנחנו לא מעוניינים לשנות כלום במחלקות האב, וגם כי שתי המחלקות הנ’'ל אינן שייכות למחלקה ספציפית שתירש אותה (abc module etc…)

לייק 1

מה ההבדל ממחלקות שעשינו עד עכשיו? האם התשובה כאן עונה לך על השאלה?

לשאלה הזו חן ענתה (אכן התייחסתי בהרחבה כאן)

כן

כיוון שבקריאה ל־__init__ של Button הפונקציה “אוטומטית” תקרא ל־__init__ של מחלקת־העל (ה־super), זה מה שקורה כשלא דורסים פעולה של מחלקת־על בתת־המחלקה.
באחרות כן מימשנו כיוון שרצינו להוסיף דברים נוספים חוץ מהקריאה ל־__init__ של מחלקת־העל.

לייק 1