我只是扩展了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)
还有其他建议吗? 附:我不允许使用异常处理:)
答案 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'
总之,你不需要测试你的成功的成功,因为它永远不会失败。