簡體   English   中英

相互導入兩個 python 模塊

[英]Importing two python modules from each other

我有兩個模塊,一個用於主菜單,我們將其稱為MainMenu.py ,另一個用於游戲InGame.py ,每個模塊中都有一個按鈕,單擊時應將我帶到另一個模塊:

注意:我總是先運行 MainMenu.py,然后使用按鈕打開 InGame,我只需要一種返回 MainMenu.py 然后再次返回新運行的 InGame 的方法,我嘗試對兩個模塊都使用類,但它沒有用,因為我在其他模塊和 InGame.py 之間有循環依賴關系

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

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

我一開始嘗試直接導入每個模塊,這顯然不起作用,它會將我從 MainMenu 帶到 InGame,回到 MainMenu 並停在那里,按下 MainMenu 中的按鈕不會做任何事情。

然后我嘗試了:

# 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

但是在轉到 MainMenu 並嘗試按下按鈕進入 InGame 后它也沒有做任何事情,它只是停在那里。

我確信這意味着我的設計一團糟,但我什至嘗試更改整個設計但沒有成功,所以我正在尋找更簡單的解決方案。

我相信不鼓勵您嘗試做的事情,您可以采取許多替代方法來消除對此類循環引用的需求。 我必須解決您的問題的第一個直接想法是使用事件驅動的設計模式。 它背后的一般概念是讓 MainMenu 注冊一個由您的按鈕調用的事件。 您的按鈕不需要知道誰在收聽事件,但主菜單仍然可以輕松接收消息。

編輯:這個名字在我輸入答案時一直在躲避我,它通常被稱為觀察者模式。

當您遇到此類問題時,通常表明設計不佳,您能夠認識到它有點混亂,這很好。 我強烈建議研究設計模式(如果你還不知道它們),即使它們使用你不知道的語言,因為它們背后的概念很重要。

在你的情況下,有一些東西可以調解兩個模塊之間的流動是要走的路,它會在某種意義上充當父母,讓你在兩個孩子之間穿行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM