如何在python dict上获取__setitem__调用的返回值

时间:2013-08-09 07:47:34

标签: python python-2.7

我只是扩展了dict的 setitem 方法的默认行为,看起来像这样

class SafeSwapDict(dict):
    def __setitem__(self, key, value):
        if isinstance(key, collections.Hashable):
            super(SafeSwapDict, self).__setitem__(key, value)
        else return False
    return True

当我打电话给那个方法时,我想获得那些返回值,但我似乎无法找到一个好转,因为

a = SafeSwapDict()
print a['1'] =  132

无效(预计===

另外

a = SafeSwapDict()
w = a['1'] = 132
print w 

将输出132(它将首先执行语句的右侧(a['1'] = 132),然后将值复制到w,而不是方法的返回值)

以下是有效的,但它并没有真正有用(如果您不能按预期使用它,为什么要重载操作符?)

print dict_out.__setitem__(1, 132)

还有其他建议吗? 附:我不允许使用异常处理:)

1 个答案:

答案 0 :(得分:2)

在您的具体示例中,dict仅在您的密钥不是Hashable时返回False。在任何其他情况下,分配都有效。

就像你进行任何分配时some_var = 2一样,你不需要测试some_var是否真的是2,因为它是。{/ p>

对于dict,无效密钥(例如list)将失败,您将收到通知:

>>> some_dict = {}
>>> some_dict[[0]] = 42   #the key is a list [0], unhashable
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

总之,你不需要测试你的成功的成功,因为它永远不会失败。