קורס Python 3 שיעור שיתוף קוד בין מחלקות


זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/python/lessons/22-code-sharing

@ynonp שאלת לגבי דרך להעביר ערך חזרה ללא שינוי פונקציית scan_board שאינה מחזירה ערך.

האם התכוונת לשימוש ב-raise להעביר Exception עם מסר כמו זה שרצינו להחזיר?
לכאורה ניתן רק בקוד של מחלקת AIPlayer ליצר את פונקציית ה-callback שתועבר ל-scan_board, כך שתזרוק exception ולעטוף את הקריאה ל-scan_board ב-try/except כדי להוציא את המסר להחזרה מה-exception.

דרך נוספת יכולה להיות עם שימוש במשתנה מחלקה, אליו יוכנס הערך להחזרה, וממנו ישלף אחרי ש-scan_board תסתיים.
יעבוד כשיש רק מופע אחד מהמחלקה הזו (או שיש מזהה ייחודי לכול מופע בו נשתמש כמפתח חד-חד ערכי במילון מחלקתי) ובצורה פחות יעילה (כי רץ על כל הלוח ללא יכולת לעצור את הלולאה שמפעילה אותו)

class AIPlayer:
    _next_move = None

    def next_move(self, board):
        def foreach_cell(i, j):
            if AIPlayer._next_move is not None:
                return None
            if board[i][j] == '.':
                AIPlayer._next_move = f"({j}, {i})"
                return f"({j}, {i})"

        AIPlayer._next_move = None
        scan_board(
            board,
            foreach_cell,
            lambda: None,
        )
        return AIPlayer._next_move
לייק 1