Не могу понять как мне переопределить класс dict и его метод get?
Мне нужно реализовать класс MyDict, который будет вести себя точно также, как и обычный словарь, за исключением того, что метод get по умолчанию будет возвращать не None, а число 0.
class MyDict(dict):
def __init__(self, *args, **kw):
super(MyDict, self).__init__(*args, **kw)
def __get__(self, instance, owner):
return 0
mydict = MyDict()
mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
Дальше я в ступоре, помогите пожалуйста.
Ответы (3 шт):
class MyDict(dict):
def __init__(self, *args, **kw):
super(MyDict, self).__init__(*args, **kw)
def __missing__(self, key):
return 0
def get(self, key):
return self.__getitem__(key)
Метод __missing__ будет вызван, если __getitem__ не найдёт нужный элемент.
Как написал vitidev, вам нужно по-другому передавать элементы. У вас просто mydict начинает ссылаться на обычный словарь.
Заполнять его нужно так
mydict.update({'one': 1, 'two': 2, 'three': 3, 'four': 4})
Самый простой способ это переопределить метод get:
class MyDict(dict):
def get(self, key, default=None):
return super().get(key, 0)
d = MyDict({"a": 1, "b": 2})
print(d.get("a"))
print(d.get("c"))
Вывод:
1
0
Как вариант, создать класс на основе встроенного словаря, и переопределить метод get с аргументом default, равным 0. Затем вызвать метод get встроенного словаря.
Нечто подобное предлагали выше, но в той реализации нет возможности указать методу mydict.get аргумент default, отличный от нуля (это не возымеет действия)
class mydict(dict):
def get(self, key, default=0):
return dict.get(self, key, default)