Как сделать подкласс «dict», который возвращает запасное значение, когда не может найти значение для ключа? - PullRequest
0 голосов
/ 16 июня 2019

Я хочу создать 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, но столкнулся с проблемами рекурсии.

Помощь?

1 Ответ

4 голосов
/ 16 июня 2019

Вы забыли вернуть значение super ():

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

Когда метод не имеет явного оператора return, функция неявно возвращает None

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...