在Python中存储项目范围的全局对象

时间:2014-06-06 14:27:17

标签: python

我有一个简单的游戏项目,其结构类似于:

src:
    game.py # <- main module
    projectile.py
    enemy.py
    heroine.py

在主模块game.py中有几个对象被初始化,我想在其他模块中使用它们,比如Pygame的精灵组或对女主角精灵的引用来瞄准敌人的射弹。我真的不想将这些引用传递给构造函数。

所以问题是 - 是否可以创建一个common.py模块来存储项目范围的全局变量?首先我尝试从其他模块导入game.py ,但它似乎创造了循环依赖,游戏将无法启动。

2 个答案:

答案 0 :(得分:2)

您应按以下方式组织代码:

project_root/
    game/
        __init__.py # "I am package" file, can be empty
        projectile.py
        enemy.py
        heroine.py

将全局变量放入__init__.py,这是举行此类事情的常用地方。

您的__init__.py文件可能包含以下内容:

CODE = "secret"
KEY = "digital"

从你的其他模块中你可以得到它们:

from game import CODE, KEY
print CODE
print KEY

注意,有两种选择如何导入 - 绝对导入(使用game包的名称)和相对的选项。

保持简单并使用绝对导入,如PEP 8建议的那样。

答案 1 :(得分:1)

我没有说过,这对Python来说是非法的或不好的做法。我在创建自己的游戏时使用了类似的方法。

我的格式化建议是使用变量名的全部大写,即

import common

    print common.CONSTANT1
    print common.CONSTANT2

from common import *

    print CONSTANT1
    print CONSTANT2

因为它会使这些变量很容易被识别为代码中的常量。