我正在尝试将参数列表作为类中的字典。由于数据的性质,一些参数是从其他参数派生的,但使用得足够频繁,我更愿意将它们的派生保留在参数字典中。我已经设法整理了一个自引用字典,当我可以直接命名字典时它工作得很好,但是因为它是一个类的一部分并且可能在许多不同的文件中实现我很难让它能够给自己命名。
class foo:
class ParamDict(dict):
def __getitem__(self, key):
val = dict.__getitem__(self, key)
return callable(val) and val() or val
params = ParamDict({
'a': 5,
'b': lambda: 2**self['a']
})
if __name__ == '__main__':
X = foo()
Y = foo()
Y.params['a'] = 3
print X.params['a'], X.params['b']
print Y.params['a'], Y.params['b']
因为我不知道从哪里调用 lambda 函数我不知道如何给它一个字典的引用,不幸的是,它似乎没有从getitem定义中提取“自我”。有什么建议么?