Объекту класса передать словарь

В коде два класса. В базовом создан словарь. Подскажите как при создании объекта производного класса присвоить ему значение этого словаря и дальше с ним работать как со словарём используя стандартные методы?

Код:

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, было бы куда проще, тогда бы передался весь функционал данной структуры, и тогда можно было бы думать только о модифицировании функционала, а не о его добавлении.

→ Ссылка