Я хочу создать SafeDict
, подкласс dict
.
Когда запрашивается получить значение для несуществующего ключа, SafeDict
должен возвращать запасное значение.
(Я знаю, что есть и другие способы сделать это, но я практикую свои навыки ООП.)
Прямо сейчас у меня есть:
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()
запускает метод __getitem__
в суперклассе list
, и у этого класса нет словаря с "Ferrari": "Enzo"
в нем?
Я пытался удалить super()
и использовать self
, но столкнулся с проблемами рекурсии.
Помощь?