Python字典包含对全局变量的引用

时间:2019-02-21 06:24:29

标签: python-3.x dictionary variables

我觉得我想以此来对抗Python的Zen,但是我有这样的情况:

my_var = False
my_var_2 = True

my_dict = {
    '1': {'a': my_var, 'b': my_var_2}
     .
     .
    'n': {...}
}

现在,我想做的是具有my_dict ['1']值保留指向全局声明的my_var和my_var_2 的链接,以便在更新my_dict ['1'] [ 'a']或my_dict ['1'] ['b'],my_var和my_var_2也得到更新。显然,使用当前代码不会发生这种情况,但是我想知道是否可以通过创造性地使用该语言来达到这种效果。

我为什么要这样做?我希望my_dict值是my_var和my_var_2的句柄,用于在对my_dict键进行键操作的泛型函数中使用,并更新在dict外部声明的这些变量(由于功能)。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

一种可能性是使索引运算符重载。 对于上述用例,重载值设置器__setitem__就足够了,但是也许您还需要__getitem__

my_var_2 = True
my_var = False

class GlobalMap:
    def __setitem__(self, key, value):
        global my_var, my_var_2
        if key == "a":
            my_var = value
        elif key == "b":
            my_var_2 = value
        else:
            raise Exception('invalid global {}'.format(key))


my_dict = {
    '1': GlobalMap(),
}

my_dict['1']['a'] = True