Я хочу написать собственный класс, который ведет себя как 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]
Я отредактировал приведенный выше пример кода, чтобы избавиться от глупой ошибки, которую я сделал перед тем, как броситься из-за стола. Это была опечатка (я должен был заметить это по сообщению об ошибке).