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

标签 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()

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

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

或者有更好的方法吗?

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

最佳答案

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

但是,不要为了上课而把他们放到类里面。如果您真的有那么多变量,也许您应该考虑将您的程序拆分成多个模块。

另外请理解,您不能像在 JavaScript 中那样在 Python 中创建全局变量。您的变量始终在模块范围内。

我举个例子。模块 a.py:

A = 42

模块 b.py:

import a

print(A)

你得到了什么? 名称错误。为什么?因为变量 A 不是全局的,所以它在模块 a 下。您需要使用 a.A 来引用它。

类下不用塞变量。它们位于充当命名空间的模块下,没有问题

关于python - 在类中包装全局变量(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14032378/

相关文章:

php - 在没有多重继承的情况下如何解决这个问题?

c++ - 如何在 Windows 上使用 Visual C++ 强制加载链接库

python - 当 python 请求结束时切换到服务器上的另一个 IP

python - 使用 Python pathlib 处理非 UTF-8 Posix 文件名?

javascript - javascript 中的 "OWN"属性是什么

javascript - this 并在 Javascript 中将函数作为参数传递

language-agnostic - 如何在伪代码中使用全局变量?

c++ - 初级程序员 c++(局部变量声明与全局变量声明)

python - Matplotlib:如何指定 x-label 边界框的宽度

python - 使用 Python 3.5 的 PyMySQL - 由于转义字符,使用 LIKE 子句选择到 pandas 数据框失败?