2014-07-10 51 views
0

所以爲了幫助我學習Python,我正在構建一個簡單的基於文本的小遊戲。我正在研究文件的最高級別結構。到目前爲止,我有main.py,input.py和commands.py。Python導入循環和頂級程序結構

main.py

from input import * 
x = 1 
start() 

input.py

from commands import * 

def inputLoop(): 
    inString = input('::> ') 
    tokens = inString.split(' ') 
    cmd = tokens[0] 
    args = tokens[1:] 
    if cmd != '': 
     try: 
      commands[cmd](args) 
     except KeyError: 
      print('Command not found.') 
     print('\n') 
    inputLoop() 

def start(): 
    inputLoop() 

commands.py

def quit(arg): 
    input('Goodbye!') 
    exit() 

def echo(arg): 
    print(' '.join(arg)) 

commands = { 
    'exit' : quit, 
    'echo' : echo 
} 

正如你可以看到主.py導入input.py,導入commands.py。這一切都很好,我可以有效地將文本輸入映射到函數,併成功傳遞參數。我遇到的麻煩是使command.py中的函數可以訪問main.py中聲明的變量的正確方法。如果我從commands.py中導入main.py,它會創建一個導入循環。我知道我錯過了一些高層次的設計模式來把這件事整合在一起。

也許我做了一個主類,一個導入類和一個指揮官類,並通過每個構造函數向下傳遞主類的實例,直到指揮官類可以引用它爲止,但對我來說這似乎很笨拙和不雅。

你會如何構建這個程序?

回答

1

如何將變量分隔到「settings.py」中,並在需要時訪問它們。

雖然我寧願來管理它們的一些類調用設置或選項中,爲改變人們可能會影響到其他設置...

此外,如果你訪問全局變量局部範圍內(函數內部),那麼你必須聲明它們是全局的。

s = 1 
def func(x): 
    global s 
    s=2 

否則你只會催生稱爲S的局部變量

+0

我的想法更像是命令需要訪問玩家和敵人的類的實例,但是這將爲該工作了。感謝您的建議! – aurath