在类中使用全局变量时,它不会返回模块级全局变量,而只会返回Error

时间:2016-12-04 14:10:14

标签: python python-3.x python-3.5 python-3.6

当使用内置debugDescription函数时,它似乎这样做:当我尝试访问我设置为从类中更改的全局值(不是全局类,因为它将被初始化覆盖。无论有多少类的初始化,我都应该保留和使用全局。

像一些示例代码:

globals()

发生的追溯:

somevalue = False

class SomeClass(object):
    """
    ...
    """
    def __init__(self):
        self.change_global_value()

    def change_global_value(self):
        """
        Changes global module values that this class is in.
        """
        globals().somevalue = True  # Error. (line 14)
        self.__module__.globals().somevalue = True  # Error. (line 14, after some changes)
        somevalue = True  # Error as well. (line 14, after some more changes)

1 个答案:

答案 0 :(得分:2)

globals()会返回dict,因此您可以使用globals()['somevalue'] = 'newvalue'分配新值:

somevalue = False

class SomeClass(object):
    """
    ...
    """
    def __init__(self):
        self.change_global_value()

    def change_global_value(self):
        """
        Changes global module values that this class is in.
        """
        globals()['somevalue'] = True

首选表单只是将变量定义为global:

somevalue = False

class SomeClass(object):
    """
    ...
    """
    def __init__(self):
        self.change_global_value()

    def change_global_value(self):
        """
        Changes global module values that this class is in.
        """
        global somevalue
        somevalue = True

请注意,这在一般情况下通常是不好的做法,特别是在课程中。