首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python存储项目范围内的全局对象。

用Python存储项目范围内的全局对象。
EN

Stack Overflow用户
提问于 2014-06-06 14:27:16
回答 2查看 443关注 0票数 2

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

代码语言:javascript
复制
src:
    game.py # <- main module
    projectile.py
    enemy.py
    heroine.py

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

所以问题是--创建一个用于存储项目范围内的全局的common.py 模块可以吗?--起初我尝试从其他模块导入game.py,但是它似乎创建了循环依赖关系,游戏不会开始。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-06 14:37:00

对于Python来说,我没有遇到任何事情表明这是非法的或糟糕的实践。我在创建自己的游戏时也使用了类似的方法。

我有一个格式化建议,就是对变量名使用所有的大写,即。

代码语言:javascript
复制
import common

    print common.CONSTANT1
    print common.CONSTANT2

代码语言:javascript
复制
from common import *

    print CONSTANT1
    print CONSTANT2

因为这将使这些变量易于识别为代码中的常量。

票数 1
EN

Stack Overflow用户

发布于 2014-06-06 14:35:38

您应以下列方式组织您的代码:

代码语言:javascript
复制
project_root/
    game/
        __init__.py # "I am package" file, can be empty
        projectile.py
        enemy.py
        heroine.py

把你的球体放进__init__.py,这是存放这类东西的常见地方。

您的__init__.py文件的内容可能如下:

代码语言:javascript
复制
CODE = "secret"
KEY = "digital"

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

代码语言:javascript
复制
from game import CODE, KEY
print CODE
print KEY

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24084215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档