מאפיה והכלה (וגם חלה)

תגיות: ,

נקודה שלא ברורה לי עד הסוף עוד מלפני ענייני הירושה -
האם מחלקות יכולות להכיל אחת את השניה או שגם כאן זה “חד כיווני”?
אמחיש דרך התרגיל של המאפיה -
מן הסתם מחלקת Game הולכת לעבוד עם מופעים של מחלקות השחקנים ולקרוא לפעולות שלהן כדי להתקדם במשחק.
אבל, האם בתוך מחלקות השחקנים ניתן לקרוא לתכונות של מחלקת Game? למשל, כשהמאפיונר יבחר שחקן להרוג, נצטרך לגשת לרשימת השחקנים שהיא תכונה של מחלקת Game ולאתר את השחקן עם אותו השם, ואז להרוג אותו.
האלטרנטיבה היא שבפעולה של ההרג במחלקה של המאפיונר, תתבצע אך ורק בחירת השחקן שאותו רוצים להרוג, והיא תועבר למחלקה הראשית שם יתבצע בפועל איתור הקורבן ושינוי הסטטוס שלו למת.

יכול להיות שזה לא משנה, אבל מעניין אותי באופן כללי כדי להבין אם זה סיבוכיות שכדאי להימנע ממנה או שזה נהוג. תודה!

2 לייקים

טכנית כן, זה אפשרי. קל יחסית לבדוק:

אין איזה חוק טכני או “מוסרי” שאני מכיר שאמור למנוע ממך לעשות את זה, אבל זה כן מרגיש לי קצת code smell וסיכוי טוב שהייתי מנסה להמנע מזה.

3 לייקים

אני גם מסתבכת עם זה, ולא מצליחה למצוא רעיון איך לעשות את זה חכם.
אפשר רמז או משהו?

בכיף, אבל אצטרך יותר מיקוד בקשר למה שאת מסתבכת בו :slight_smile:

תודה.
אני מחפשת איך לקשר, למשל, בין איש מאפיה, למשחק, על מנת להרוג שם שחקנים. [כנ"ל כמובן על שוטר והשחקנים שהוא חושד].
אני מבינה מה שכתבת על ה-code smell, ולא מצליחה לחשוב על דרך חכמה לעשות זאת.

אלא אם אני מאד מאד מצמצמת את הפונקציה שבתוך מחלקת האיש מאפיה\שוטר ואת רובה עושה במחלקת המשחק, אבל איך שאני מבינה את הדרישות - זו לא המטרה.

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

אבל איש מאפיה הוא לא סוג של משחק
איך הוא יכול לרשת ממחלקת המשחק?

מחלקת המשחק תכיל את כל שאר הדברים, שחקנים, תפקיד של כל שחקן וכו’, והוא ירש אותה…

אני לא מבינה מה הכוונה ב’יירש אותה’.

class Game:
....



class Murderer(Game):
...

זה לא הגיוני לי.
בד"כ כשמחלקה יורשת ממחלקה, זה כשמתקיים ‘סוג של’.
למשל סוזוקי הוא סוג של מכונית, ולכן סוזוקי יכול לרשת ממכונית.
איש מאפיה הוא לא סוג של משחק, לכן לא נשמע לי הגיוני שהוא יירש ממשחק.

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

class Murder:
.... 

class Game:


def murderer (self, murderer ):
וכאן לקרוא למחלקת הרוצח ולעשות איתה את הפעולות

אני מסכים עם רחל שירושה פה היא רעיון לא כל כך מתאים (מהסיבות שהיא תארה – רוצח אינו סוג של משחק).

זו כן אפשרות סבירה יחסית, בתלות באיך שחשבת לעצב את המשחק.
בכ"מ לדעתי אחד הפתרונות האלגנטיים פה הוא כן קשר של הכלה (the game has a mafia person in it)

לייק 1

אני גם הבנתי שירושה זה לא הרעיון הכי טוב, אבל זה במחברת של ירושה :upside_down_face: אז…

אני כן מחדדת ושואלת - אם כך זה צריך להיות הכלה דו-צדדית, לא?

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

לייק 1

אבל אז זה לא ממש הולך עם הדרישות של התרגיל…