gpt4 book ai didi

python - 获取 __setitem__() 的返回值和字典的长度

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:22 24 4
gpt4 key购买 nike

我有以下字典:

class Only5Items(dict):
def __setitem__(self, key, value):
if len(self) < 5:
super(Only5Items, self).__setitem__(key, value)

如果我成功添加一个项目,我想返回 true。有什么想法吗?

我再解释一下。例如:

items = Only5Items()
items["hi1"] = "asdf1"
items["hi2"] = "asdf2"
items["hi3"] = "asdf3"
items["hi4"] = "asdf4"
items["hi5"] = "asdf5"
items["hi6"] = "asdf6"

items["hi6"] = "asdf6" 不会插入。我想打印一条关于它的消息。

编辑:len(self) 有效。更具体地说,我不想打印有关它的消息,如果我成功添加它,我想返回 true/false。类之外的东西。

最佳答案

赋值在 Python 中没有返回值,__setitem__() 的返回值被忽略。通常,您会想引发异常:

class Only5Items(dict):

def __setitem__(self, key, value):
if len(self) < 5 or key in self: # allow reassignment of existing key
return super(Only5Items, self).__setitem__(key, value)
raise KeyError("maximum number of items (5) exceeded")

然后您的客户端代码可以捕获异常:

items = Only5Items(hi1="asdf1", hi2="asdf2", hi3="asdf3", hi4="asdf4", hi5="asdf5")
try:
items["hi6"] = "asdf6"
except KeyError as e:
print(e)

如果您想返回True/False,那么您必须编写自己的可以返回值的赋值方法:

class Only5Items(dict):

def __setitem__(self, key, value):
if len(self) < 5 or key in self: # allow reassignment of existing key
return super(Only5Items, self).__setitem__(key, value)
raise KeyError("maximum number of items (5) exceeded")

def did_set(self, key, value):
try:
self[key] = value
except KeyError:
return False
return True

然后你会像这样使用它:

if not items.did_set("hi6", "asdf6"):
print "couldn't set key 'hi6', dictionary is probably full"

您可能还想重写 setdefault() 来检查项目的数量...另外,在实例化时传入最大数量会很好(而且很容易)类,而不是将其硬编码为 5。

关于python - 获取 __setitem__() 的返回值和字典的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19687021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com