Вопрос по dictionary, dictmixin, python-3.x – Как добиться функциональности UserDict.DictMixin в Python 3?

6

В Python 3UserDict.DictMixin класс был перемещен вcollections модуль. Документы предлагают использоватьcollections.MutableMapping на своем месте, однако, этот абстрактный класс не предоставляет ряд методов, которыеDictMixin делает / сделал.

Есть ли другой (или лучший) способ определить их, если не взять частную копиюUserDict.Mixin источник для импорта (или, возможно, просто копирования необходимых частей) в мой собственный словарь-класс?

Потенциально полезноarticle Yibo Yang

Ваш Ответ

1   ответ
3

«Количество методов» конкретно__len__ а также__iter__ так что дополнительной работы не так уж много.

def __len__(self):
    return len(self.mylist)

def __iter__(self):
    for i in self.mylist:
        yield i

Должен работать, я думаю (непроверенный, хотя).

Да, но UserDict.DictMixin не определяет__setitem__ либо ваш класс, основанный на DictMixin, должен уже иметь их. Также верно для__delitem__ а также__getitem__.
И что касается вашего предыдущего вопроса: на самом деле, выmust воплощать в жизнь__len__ а также__iter__ когда вы используете MutableMapping. Они не являются обязательными, как я думал раньше.
Разве это не__len__ привести к бесконечной рекурсии?
Вы правы, конечно. Я неправильно истолковывал то, что видел в документах дляABCs, Например, я задавался вопросом обо всех пропавшихinterxxx() методы, которые определены в Py 2.x DictMixin.py для класса ... забывая, очевидно, что они не существуют в Py 3.x. Спасибо, что помогли мне понять мое ошибочное впечатление. martineau
@ThomasK: Да, теперь исправлено.

Похожие вопросы