Python导入循环和顶级程序结构

时间:2014-07-10 18:44:40

标签: python design-patterns import

所以帮助我学习Python我正在构建一个简单的基于文本的小游戏。我正在研究文件的粗略最高级别结构。到目前为止,我有main.py,input.py和commands.py。

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
}

正如您所见,main.py导入input.py,它会导入commands.py。这一切都很好,我可以有效地将文本输入映射到函数,并成功传递参数。我遇到的问题是使在main.py中声明的变量可以被commands.py中的函数访问的正确方法。如果我从commands.py导入main.py,它会创建一个导入循环。我知道我错过了一些高级别的设计模式来将整个事物放在一起。

也许我创建了一个主类,一个导入类和一个命令类,并通过每个构造函数传递主类的实例,直到指令器类可以引用它,但这对我来说似乎很狡猾和不优雅。

你将如何构建这个程序?

1 个答案:

答案 0 :(得分:1)

如何将变量分隔为“settings.py”并在需要访问时将其导入。

虽然我更喜欢在名为“设置”或“选项”的某个类中管理它们,但是对一个类的更改可能会级联到其他设置中...

此外,如果您在本地范围内(函数内)访问全局变量,则必须将它们声明为全局变量。

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

否则你只会产生一个名为s

的局部变量