Объекту класса передать словарь
В коде два класса. В базовом создан словарь. Подскажите как при создании объекта производного класса присвоить ему значение этого словаря и дальше с ним работать как со словарём используя стандартные методы?
Код:
class Gifts:
def __init__(self):
self.gifts = dict()
def add(self, value):
if value in self.gifts.keys():
self.gifts[value] = int(self.gifts[value]) + 1
else:
self.gifts[value] = 1
def get_gifts(self):
return sorted(list(self.gifts.keys()))
def __repr__(self):
return 'Gifts()'
class GhostGifts(Gifts):
pass
Пример ввода:
gg = GhostGifts()
print(gg[key])
print(len(gg))
Необходимый вывод:
value
32
Ответы (1 шт):
Автор решения: Bol4onok
→ Ссылка
Для того чтобы использовать оператор [] нужно перегрузить такой магический метод, как getitem, а для вывода в термина str, выглядеть это будет вот так:
class Gifts:
def __init__(self):
self.gifts = dict()
def add(self, value):
if value in self.gifts.keys():
self.gifts[value] = int(self.gifts[value]) + 1
else:
self.gifts[value] = 1
def get_gifts(self):
return sorted(list(self.gifts.keys()))
def __repr__(self):
return 'Gifts()'
# Для оператора []
def __getitem__(self, item):
return self.gifts[item]
# Для print()
def __str__(self):
return ''.join(f'key: {key}, value: {value};\n' for key, value in self.gifts.items())
class GhostGifts(Gifts):
pass
someGift = GhostGifts()
someGift.add(4)
someGift.add('SomeStr')
print(someGift[4])
print(someGift)
Вывод:
1
key: 4, value: 1;
key: SomeStr, value: 1;
Но стоит заметить, что наследование класса Gifts от dict, было бы куда проще, тогда бы передался весь функционал данной структуры, и тогда можно было бы думать только о модифицировании функционала, а не о его добавлении.