【问题标题】:Should I use class as a container for global variable我应该使用类作为全局变量的容器吗
【发布时间】:2011-09-08 09:29:51
【问题描述】:

我在 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)

我知道这种方法很有效并且非常方便(对我来说),但我想知道这会如何影响我的游戏速度,可能是我在做一些可怕的事情吗? 非常感谢您的回答。

【问题讨论】:

    标签: python memory global-variables


    【解决方案1】:

    请帮自己一个忙,重新考虑您的设计。

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

    “全局”变量的好地方可能是主类或函数。一切开始的地方。我想有一个循环,有些事情会永久重复。从那里你可以将它传递给特定的类或函数。我不知道你的架构,但拥有全局变量很少有用。

    【讨论】:

    • 感谢您的智慧之言,我会尽力摆脱他们。
    • 如果您尝试优化代码(例如时间或内存空间),您应该始终做一件事:测量。如果没有很大的改进,那就使用更容易理解的版本!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-04
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多