在类中包装全局变量(python)

jin*_*jin 3 python oop global-variables

我是编程新手,最近学习了 python 和面向对象编程的基础知识。我知道拥有大量全局变量通常是一个坏主意,我可以将它们全部放入一个类中。这是正确的方法吗?

class GameState(object):
    def __init__(self):
        self.variable1 = 1
        self.variable2 = 2
        self.list = [3, 4, 5]

g_state = GameState()
Run Code Online (Sandbox Code Playgroud)

而且,如果我想访问 g_state 中的变量,最好的方法是什么?

将 g_state 传递给需要访问的函数/类?实现 getter 并调用它们?直接使用g_state.variable1?

或者,还有更好的方法?

编辑:更具体地说,我正在尝试使用 pygame 在 python 中编写一个游戏,并且正在考虑将我的游戏状态变量放入一个类中,以免周围有一堆全局变量。我不确定如何以良好的设计访问这些变量,所以我以后不会遇到麻烦。

Kug*_*gel 5

你是对的,太多的全局变量不是一个好主意。受污染的全局命名空间可能会导致错误。

但是,不要为了它而把它们放在课堂上。如果你真的有那么多变量,也许你应该考虑将你的程序分成多个模块。

另请理解,您无法像在 JavaScript 中那样在 Python 中创建全局变量。您的变量始终位于模块下。

让我用一个例子来说明。模块 a.py:

A = 42
Run Code Online (Sandbox Code Playgroud)

模块 b.py:

import a

print(A)
Run Code Online (Sandbox Code Playgroud)

你得到了什么?NameError. 为什么?因为变量 A 不是全局的,它在 module 下a。您需要使用a.A来引用它。

没有必要在类下填充变量。它们位于模块下,充当命名空间,并且没有任何问题