נקודה שלא ברורה לי עד הסוף עוד מלפני ענייני הירושה -
האם מחלקות יכולות להכיל אחת את השניה או שגם כאן זה “חד כיווני”?
אמחיש דרך התרגיל של המאפיה -
מן הסתם מחלקת Game הולכת לעבוד עם מופעים של מחלקות השחקנים ולקרוא לפעולות שלהן כדי להתקדם במשחק.
אבל, האם בתוך מחלקות השחקנים ניתן לקרוא לתכונות של מחלקת Game? למשל, כשהמאפיונר יבחר שחקן להרוג, נצטרך לגשת לרשימת השחקנים שהיא תכונה של מחלקת Game ולאתר את השחקן עם אותו השם, ואז להרוג אותו.
האלטרנטיבה היא שבפעולה של ההרג במחלקה של המאפיונר, תתבצע אך ורק בחירת השחקן שאותו רוצים להרוג, והיא תועבר למחלקה הראשית שם יתבצע בפועל איתור הקורבן ושינוי הסטטוס שלו למת.
יכול להיות שזה לא משנה, אבל מעניין אותי באופן כללי כדי להבין אם זה סיבוכיות שכדאי להימנע ממנה או שזה נהוג. תודה!
אין איזה חוק טכני או “מוסרי” שאני מכיר שאמור למנוע ממך לעשות את זה, אבל זה כן מרגיש לי קצת code smell וסיכוי טוב שהייתי מנסה להמנע מזה.
3 לייקים
Rach
אני גם מסתבכת עם זה, ולא מצליחה למצוא רעיון איך לעשות את זה חכם.
אפשר רמז או משהו?
Yam
בכיף, אבל אצטרך יותר מיקוד בקשר למה שאת מסתבכת בו
Rach
תודה.
אני מחפשת איך לקשר, למשל, בין איש מאפיה, למשחק, על מנת להרוג שם שחקנים. [כנ"ל כמובן על שוטר והשחקנים שהוא חושד].
אני מבינה מה שכתבת על ה-code smell, ולא מצליחה לחשוב על דרך חכמה לעשות זאת.
אלא אם אני מאד מאד מצמצמת את הפונקציה שבתוך מחלקת האיש מאפיה\שוטר ואת רובה עושה במחלקת המשחק, אבל איך שאני מבינה את הדרישות - זו לא המטרה.
zurikarat
את יכולה לבנות מחלקת איש מאפיה, שתכיל בתוכה פעולה שתבחר איש מהמשחק (המחלקה הזו תירש ממחלקת המשחק), ובמחלקת המשחק תוכלי לשים פעולה שתקרא למחלקת איש המאפיה ותפעיל את פעולתה לחיפוש שחקן.
Rach
אבל איש מאפיה הוא לא סוג של משחק
איך הוא יכול לרשת ממחלקת המשחק?
zurikarat
מחלקת המשחק תכיל את כל שאר הדברים, שחקנים, תפקיד של כל שחקן וכו’, והוא ירש אותה…
Rach
אני לא מבינה מה הכוונה ב’יירש אותה’.
zurikarat
class Game:
....
class Murderer(Game):
...
Rach
זה לא הגיוני לי.
בד"כ כשמחלקה יורשת ממחלקה, זה כשמתקיים ‘סוג של’.
למשל סוזוקי הוא סוג של מכונית, ולכן סוזוקי יכול לרשת ממכונית.
איש מאפיה הוא לא סוג של משחק, לכן לא נשמע לי הגיוני שהוא יירש ממשחק.
zurikarat
את יכולה להשתמש בהכל, אבל זה קטע של ירושה,
יכול להיות שזה באמת נשמע פחות הגיוני ולכן גם אני הייתי שמח אם מחלקת המשחק הייתה יורשת מהשוטר, מהאזרח ומהרוצח, אבל במחברת זו עוד לא נלמד על ירושה של כמה מחלקות, אלא רק של אחת.
דוגמה להכלה:
class Murder:
....
class Game:
def murderer (self, murderer ):
וכאן לקרוא למחלקת הרוצח ולעשות איתה את הפעולות
Yam
אני מסכים עם רחל שירושה פה היא רעיון לא כל כך מתאים (מהסיבות שהיא תארה – רוצח אינו סוג של משחק).
זו כן אפשרות סבירה יחסית, בתלות באיך שחשבת לעצב את המשחק.
בכ"מ לדעתי אחד הפתרונות האלגנטיים פה הוא כן קשר של הכלה (the game has a mafia person in it)
לייק 1
zurikarat
אני גם הבנתי שירושה זה לא הרעיון הכי טוב, אבל זה במחברת של ירושה אז…
Rach
אני כן מחדדת ושואלת - אם כך זה צריך להיות הכלה דו-צדדית, לא?
car.chopin
אני נמנעתי מזה והפונקציה רק קיבלה שם מהמשתמש שחזר אחר כך למחלקת המשחק בה התבצעה בפועל הפעולה.