我有一个简单的游戏项目,其结构类似于:
src:
game.py # <- main module
projectile.py
enemy.py
heroine.py
在主模块game.py
中有几个对象被初始化,我想在其他模块中使用它们,比如Pygame的精灵组或对女主角精灵的引用来瞄准敌人的射弹。我真的不想将这些引用传递给构造函数。
所以问题是 - 是否可以创建一个common.py
模块来存储项目范围的全局变量?首先我尝试从其他模块导入game.py
,但它似乎创造了循环依赖,游戏将无法启动。
答案 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
因为它会使这些变量很容易被识别为代码中的常量。