תכונות ו-MIXIN (ומלון קליפורניה)

תגיות:

מההדגמות שהיו במחברת 2 + מתחילת החשיבה על מלון קליפורניה,
אני מנסה לחדד לעצמי את הקשר\הבדל בין תכונות לבין מחלקות MIXIN.
למה הכוונה - מחלקת כפתור ירשה את מחלקת מלבן גדול ומחלקת לחיץ. לפני המחברת הזאת, הייתי אומרת שהדברים האלה יכולים להיות פשוט תכונות של מחלקת כפתור ('self.shape = 'rectangle או self.clicked = True), למשל.
אני מנסה לחדד לעצמי מה הערך המוסף של מחלקות ה-MIXIN על תכונות וקצת מתקשה. אשמח להסבר דרך החשיבה הזו וההקבלה לתכונות, אם ניתן… או לכל הסבר שהוא אם אני לגמרי לא בכיוון :sweat_smile:

דמייני שיש לך מפעל לרובוטים (לצורך כך ניצור מחלקה שנקראת Robot). השלד של כל הרובוטים נראה פחות יותר יותר אותו דבר, אבל יש הרבה דגמים ולכל דגם יש מחלקה משלו שיורשת מ־Robot.
אז נניח יש KillerRobot, DancingRobot, BakingRobot ו־CleaningRobot.
לרוב הרובוטים יש 2 ידיים ו־2 רגליים. את יכולה להגדיר מחלקה שנקראת RegularLimbsMixing שתגדיר self.legs = 2, self.hands = 2.
עכשיו את יכולה ש־KillerRobot, DancingRobot ו־BakingRobot ירשו ממנה כדי לקבל את התכונות הללו.
אפשר לעשות אותו דבר לצבעים של הרובוט, נניח (self.hands_color = ..., self.head_color = ...).
השם Mixin נגזר מדוכן גלידה שהיית מרכיבה בעצמך. היית בוחרת איזה דברים לשים בגלידה (what to mix in), וזה הדימוי שנבחר לייצג את היכולת הזו בתכנות.

הרעיון של Mixin הוא מחלקה שהמטרה שלה היא להיות כמו plugin שכזה שאת יכולה “לחבר” להרבה מחלקות.
את מגדירה במחלקה אחת (ה־Mixin) סט של תכונות/פעולות שאת יודעת שיהיו משותפות להרבה מחלקות, כי יש להן משהו משותף, ואז מבצעת ירושה ל־Mixin כדי שכולם יקבלו את התכונות/פעולות האלו.

7 לייקים

זה ממש עושה סדר.
קיוויתי שתענה רק בעוד כמה שעות אבל מה שנקרא - אכזבת אותי לטובה.
תודה רבה!

לייק 1