我应该使用class作为全局变量的容器

时间:2011-09-08 09:29:51

标签: python memory global-variables

我在pygame中制作了一个简单的游戏,我意识到我需要一堆标记,数量和各种全球员工。所以我决定定义一个类并使用它:

class Staff():
    def __init__(self):
        self.modes={'menu':True,'spawning':False,'sprite_change':False}
        self.timer=pygame.time.Clock()
        self.tick_count=0

在我的游戏循环中,我只给我的所有函数一个变量:

def main_loop():
    staff=Staff()
    while not done:
        update_positions(staff)
        clear_background(staff)
        draw_sprites(staff)

我知道这种方法很有效(对我而言),但是我想知道这会影响我的游戏速度,可能是我做了一些可怕的事情? 非常感谢您的回答。

2 个答案:

答案 0 :(得分:2)

请帮个忙,重新考虑你的设计。

首先,您可能会认为使用全局变量更容易。您可以传递值,您可以从每个函数访问它们,而无需使用参数将它们传递给它们。但是,当涉及调试或发现错误或仅仅在一段时间内查看代码后,全局变量变成了一场噩梦。因为您很容易忘记这些变量会对其他函数或类产生影响的位置。所以,帮自己一个忙,重新考虑你的设计。

“全局”变量的好地方可以是例如主类或函数。一切都从哪里开始。我想有一个循环,有些东西会永久重复。从那里你可以将它传递给特定的类或函数。我不知道你的架构,但根本没有全局变量。

答案 1 :(得分:1)

虽然我根本不懂python,但一般来说全局变量都是个坏主意。我建议使用Singleton模式。虽然这也不是最好的主意,但它肯定比全局更好: Python and the Singleton Pattern

除此之外,你的方法对我来说似乎很好。