如何在 Python 中访问类内部的全局变量

新手上路,请多包涵

我有这个:

 g_c = 0

class TestClass():
    global g_c
    def run(self):
        for i in range(10):
            g_c = 1
            print(g_c)

t = TestClass()
t.run()

print(g_c)

我怎样才能真正修改我的全局变量 g_c?

原文由 torayeff 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 334
2 个回答

通过在访问它的函数中声明它 global

 g_c = 0

class TestClass():
    def run(self):
        global g_c
        for i in range(10):
            g_c = 1
            print(g_c)

Python 文档 是这样说的,关于 global 语句:

全局语句是适用于整个当前代码块的声明。

原文由 unwind 发布,翻译遵循 CC BY-SA 4.0 许可协议

您需要在函数内移动 global 声明:

 class TestClass():
    def run(self):
        global g_c
        for i in range(10):
            g_c = 1
            print(g_c)

该语句告诉 Python 编译器对该名称的任何赋值(和 其他绑定操作)都会改变全局命名空间中的值;默认是将分配给函数中任何地方的任何名称放在局部名称空间中。该语句仅适用于当前范围。

由于您永远不会在 类主体 中分配给 g_c ,因此将语句放在那里没有任何效果。 global 语句只适用于它所使用的范围,从不适用于任何嵌套范围。请参阅 global 语句文档,其打开方式为:

全局语句是适用于整个当前代码块的声明。

嵌套函数和类不是当前代码块的一部分。

我将在此处插入针对使用全局变量来共享不断变化的状态的强制性警告:不要这样做,这会使您更难推断代码的状态、更难测试、更难重构等。如果您 必须 共享一个改变单例状态(整个程序中的一个值)然后至少使用一个 _类属性_:

 class TestClass():
    g_c = 0

    def run(self):
        for i in range(10):
            TestClass.g_c = 1
            print(TestClass.g_c)  # or print(self.g_c)

t = TestClass()
t.run()

print(TestClass.g_c)

请注意我们如何仍然可以从外部访问相同的值,命名空间为 TestClass 命名空间。

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏