我觉得我想以此来对抗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外部声明的这些变量(由于功能)。
有什么想法吗?
答案 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