2

我只是将 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)

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

4

1 回答 1

2

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

就像你做任何分配一样some_var = 2,你不需要测试是否some_var真的是2,因为它是。

在 的情况下dict,无效的键(例如 a 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'

总之,你不需要测试你的分配是否成功,因为它永远不会默默地失败。

于 2013-08-09T08:13:40.770 回答