如何生成“dict”的子类,在找不到键的值时返回回退值?

2024-06-13 14:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建SafeDict,一个dict的子类

当要求检索不存在的键的值时,SafeDict应返回回退值。
(我知道还有其他方法可以做到这一点,但我正在练习我的OOP技巧。)

现在我有:

class SafeDict(dict):
    def __getitem__(self, key):
        try:
            super().__getitem__(key)
        except KeyError:
            return "Beetle"

a = {"Ford": "Mustang"}
b = SafeDict({"Ferrari": "Enzo"})

print(a["Ford"])  # This prints "Mustang" (good)
#print(a["Aston"]) # This raises KeyError (good)

print(b["Ferrari"]) # This should print "Enzo", but it prints "None" (bad)
print(b["Aston"])  # This prints "Beetle" (good)

可能print(b["Ferrari"])打印None,因为super()list超类上运行__getitem__方法,而该类中没有包含"Ferrari": "Enzo"的字典

我试图删除super(),并使用self,但遇到了递归问题

救命啊


Tags: 方法keyselfthisprintsdictgoodprint
1条回答
网友
1楼 · 发布于 2024-06-13 14:30:35

您忘记返回super()值:

class SafeDict(dict):
    def __getitem__(self, key):
        try:
            return super().__getitem__(key)
        except KeyError:
            return "Beetle"

当方法没有显式的return语句时,函数将隐式返回None

相关问题 更多 >