Класс Python, который действует как dict

Я хочу написать собственный класс, который ведет себя как dict - поэтому я наследую от dict .

Мой вопрос, однако вот что: Нужно ли мне создавать частный член dict в моем методе __ init __ () ?. Я не вижу в этом смысла, поскольку у меня уже есть поведение dict , если я просто наследую от dict .

Кто-нибудь может указать, почему большинство фрагментов наследования выглядят как ниже?

class CustomDictOne(dict):
   def __init__(self):
      self._mydict = {} 

   # other methods follow

Вместо более простого ...

class CustomDictTwo(dict):
   def __init__(self):
      # initialize my other stuff here ...

   # other methods follow

На самом деле, Думаю, я подозреваю, что ответ на вопрос состоит в том, что пользователи не могут напрямую обращаться к вашему словарю (т.е. они должны использовать предоставленные вами методы доступа).

Однако как насчет оператора доступа к массиву []? Как бы это реализовать? До сих пор я не видел примера, показывающего, как переопределить оператор [] .

Значит, если функция доступа [] не предусмотрена в пользовательском классе, унаследованные базовые методы будут работать с другим словарем?

Я попробовал следующий фрагмент, чтобы проверить свое понимание наследования Python:

class myDict(dict):
    def __init__(self):
        self._dict = {}

    def add(self, id, val):
        self._dict[id] = val


md = myDict()
md.add('id', 123)
print md[id]

Я получил следующую ошибку:

KeyError: <встроенный идентификатор функции>

Что не так с приведенным выше кодом?

Как мне исправить класс myDict , чтобы я мог написать такой код?

md = myDict()
md['id'] = 123

[Edit]

Я отредактировал приведенный выше пример кода, чтобы избавиться от глупой ошибки, которую я сделал перед тем, как броситься из-за стола. Это была опечатка (я должен был заметить это по сообщению об ошибке).

96
задан Elliot Cameron 24 January 2012 в 15:58
поделиться