У вас есть несколько вариантов.Если вы считаете, что ваш класс крякает как dict
, то ваш лучший выбор Лучше всего просто расширить dict
вместо ссылки на один и попытаться перенаправить все методы:
class Parent(dict):
# probably do something with the constructor, maybe
Это позволитиндексировать прямо в Parent
, перечислять ключи, перебирать значения и т. д. В то же время вы можете добавлять любые дополнительные атрибуты, свойства и методы, которые пожелает ваше сердце.
Буквальный ответ на вашвопрос __getitem__
, __setitem__
и __delitem__
.Вы можете реализовать три варианта использования оператора индексирования с помощью этих методов:
class Parent:
def __init__(self, *args, **kwargs):
self.codes = dict(*args, **kwargs)
def __getitem__(self, key):
return self.codes[key]
def __setitem__(self, key, value):
self.codes[key] = value
def __delitem__(self, key):
del self.codes[key]
Методы вызываются для экземпляра Parent
точно так же, как Parent
перенаправляет их на dict
.
Для дальнейшего использования методы, показанные здесь (включая ваш пример __add__
), называются магическими, специальными или более грубыми методами.Все атрибуты dunder (двойное подчеркивание) зарезервированы интерпретатором.Они служат многим целям, включая перегрузку операторов в пользовательских объектах.(Почти) полная спецификация существующих имен доступна в документации Модель данных Python .