Я хочу написать собственный класс, который будет вести себя как 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: < встроенная функция id>
Что не так с приведенным выше кодом?
Как это сделать Исправляю класс myDict, чтобы можно было писать такой код?
Код: Выделить всё
md = myDict()
md['id'] = 123
I have edited the code sample above to get rid of the silly error I made before I dashed away from my desk. It was a typo (I should have spotted it from the error message).
Источник: https://stackoverflow.com/questions/401 ... -like-dict