我正在尝试将参数列表作为类中的字典。 由于数据的性质,一些参数来自其他参数,但经常使用,我宁愿将它们的推导保留在参数字典中。 我已经设法组建了一个自我引用的字典,当我可以直接命名字典时可以正常工作,但因为它是一个类的一部分,并且可能在许多不同的文件中实现,我很难让它能够自称。
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中获取'self'不幸的是,定义。 有什么建议吗?
答案 0 :(得分:3)
self
不只是神奇地出现;当通过实例(通过invoking the function as a descriptor)访问时,Python函数被包装在方法中,然后self
作为第一个参数传递给函数。
对于你的lambdas,你需要在中明确地传递self
:
class ParamDict(dict):
def __getitem__(self, key):
val = dict.__getitem__(self, key)
return callable(val) and val(self) or val
params = ParamDict({
'a': 5,
'b': lambda self: 2**self['a']
})