代码之家  ›  专栏  ›  技术社区  ›  Ahmed Mahmoud

相互导入两个python模块

  •  0
  • Ahmed Mahmoud  · 技术社区  · 2 年前

    MainMenu.py 还有一个游戏 InGame.py ,每个模块中都有一个按钮,单击该按钮时应将我带到另一个模块:

    # MainMenu.py
    if button_clicked:
        # run InGame.py
    

    # InGame.py
    if button_clicked:
        #run MainMenu.py
    

    我一开始试着直接导入每个显然不起作用的模块,它会把我从主菜单带到InGame,回到主菜单,然后停在那里,按下主菜单上的按钮什么也做不了。

    # MainMenu.py
    if button_clicked:
        if __name__ == "main":
            import InGame
        else:
            del InGame
            sys.modules.pop('InGame')
            import InGame
    

    # InGame.py
    if button_clicked:
        import MainMenu
    

    但它在进入主菜单并试图按下InGame按钮后也什么都没做,它就停在那里了。

    1 回复  |  直到 2 年前
        1
  •  1
  •   ZXYNINE    2 年前

    我相信你正在尝试做的事情是不被鼓励的,你可以采取一些替代方法来消除这种循环引用的需要。我要解决您的问题的第一个直接想法是使用事件驱动的设计模式。它背后的一般概念是让主菜单注册一个由按钮调用的事件。您的按钮不需要知道谁正在收听活动,但主菜单仍然可以轻松地接收消息。

    当你遇到这样的问题时,通常表明设计不好,你能意识到它有点凌乱,这很好。我强烈建议研究设计模式(如果你还不知道),即使它们是用你不知道的语言编写的,因为它们背后的概念很重要。

    在你的案例中,要做的就是在两个模块之间找到一个中介,在某种意义上,它将充当父母,让你在两个孩子之间穿行