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

Программы на Python
Гость
Класс 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: < встроенная функция id>


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

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

Код: Выделить всё

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

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

Вернуться в «Python»