2013-03-03 40 views
0

我對Python比較新,我在導入變量以在另一個類中使用它時遇到了一些麻煩。我也看過關於這個主題的其他幾個問題,並試圖讓它工作,但似乎我早期設置這個程序的方式可能是問題。我將簡化這是怎麼回事所以有少讀...如何在不實例化類的情況下從另一個文件讀取實例變量?

Server.py:

import Game 
class Server(): 
    def __init__(self): 
     # Server connection details here 
     self.test = 5 
     self.game = Game() 

    def serve(self): 
     # Client processing, etc. 
     self.game.game_loop() 

if __name__ == "__main__": 
    server = Server() 
    server.serve() 

Game.py:

class Game(): 
    def __init__(self): 
     # Other variables... 

    def game_loop(self): 
     # To reference server's instance variables 
     from Server import server 

     print test 

在這個例子中,我試圖從Server的服務器實例引用變量「test」。值得注意的是,如果我將兩個類放在同一個文件中,然後在結尾處刪除if語句,但是我寧願沒有一個文件那麼長,這也可以工作:

因爲這些是在單獨的文件中,如果不刪除Server.py中的if語句,我無法從「服務器」獲取實例變量。當我刪除它時,由於我正在做的其他事情,我得到套接字錯誤......我需要使它只有一個服務器對象(並且它的類只被「調用」一次),但是它「 d真的很方便,能夠引用這些實例變量,而不會在每次運行時將它們傳遞到我的Game類中...

部分原因肯定是我的錯,因爲我將程序設置錯了......但我太過分了,從此開始。有什麼辦法可以採取這種設置並閱讀這些變量?

+2

您需要'從遊戲導入遊戲' - 至少部分問題在於您的考試ple,'Game'是包含* class *'Game'的*模塊*。所以,你不能做'Game()',因爲模塊不可調用。或者,你可以做'self.game = Game.Game()' – mgilson 2013-03-03 02:01:40

+0

哎呀,謝謝你。它實際上就是這樣,但我把兩個類放在同一個文件中,然後忘了編輯它,當我在這裏發佈。 – MattM 2013-03-03 02:26:22

回答

2

首先,test存在作爲實例變量,所以你需要的Server傳遞一個實例,以你的遊戲循環:

class Server: 
    def serve(self): 
    # Client processing, etc. 
    self.game.game_loop(self) 

接下來,你可以在game_loop找到test看在傳入的情況下:

class Game: 
    def game_loop(self, server): 
    print server.test 
+0

啊,非常感謝!沒有意識到我可以像這樣把「自我」扔進game_loop ......太棒了!我認爲這是我而不是Python的問題:) – MattM 2013-03-03 02:30:11

相關問題