所有模块中Python的全局变量

时间:2014-10-07 13:17:41

标签: python module global-variables python-module

我目前正在使用Python开发一个游戏项目,我发现自己正在努力解决这些问题"因为我习惯使用C语言或Java等语言,所以在Python之后。

我试图"划分"我的项目在几个文件中(如果我没有弄错的话称为模块,尽管它们与C源文件在同一个文件夹中)具有不同的主题:objects.py,{{1} },map.py等。它们包含与这些概念相关的不同类和函数。我有一个rendering.py,其中包含我的所有" main"功能(例如main.py等)以及第一个"呼叫",将调用new_game

我还有一个main_menu文件,用于存储常量值。现在的问题是,我有几个"全球"游戏中的变量和对象:玩家对象,地图等。我希望这些变量在所有模块中保持全局,并且能够从任何地方访问和修改它们。

我首先创建了一个constants.py文件,其中列出了我的所有变量(例如global_variables.pymap = None等),期望通过其他模块修改它们。

问题是,每当我再次调用import player = None时,它会遍历整个代码并将所有代码重新初始化为global_variables,这显然是我不想要的。

我在另一个stackoverflow线程中读到了一个提示:在我的文件中创建一个None函数,我将初始化所有变量并将它们声明为全局变量。这样,我拨打init()一次,然后我就可以global_variables.init()来访问播放器并对其进行修改。

效果很好,但我发现它很混乱。我有大量的global_variables.player,然后是global foo,感觉就像是不必要的代码行。此外,IDE无法访问"当我输入global_variables时的变量。 ,它不会将变量建议为自动完成,这非常痛苦。

那么还有另一种方法吗?这个想法将是"宣布"任何函数中的变量,以便IDE了解它们,但只有"初始化"它们一次,以便每次导入foo = None模块时都避免重置它们。

1 个答案:

答案 0 :(得分:3)

  

问题是,每当我再次调用import global_variables时,它会遍历整个代码并将所有代码重新初始化为None,这显然是我不想要的。

不,Python多次导入该模块时不会重新运行代码。模块只执行一次,生成一个模块对象,然后重新用于后续导入。

因此,对所有程序全局变量使用模块都可以。只需确保导入模块并分配回该模块对象的属性:

import global_variables

global_variables.name = 'Inigo Montoya'

以及导入global_variables的任何其他模块都会将global_variables.name设置为'Inigo Montoya'。无需init()功能。

使用from global_variables import name,因为这会在您的模块中创建一个新名称name,如果其他代码重新绑定global_variables.name,则不会看到任何新值不同的价值。