подклассы из OrderedDict и defaultdict

Раймонд Хеттингер показал действительно классный способ сочетания классов коллекций:

from collections import Counter, OrderedDict class OrderedCounter(Counter, OrderedDict): pass # if pickle support is desired, see original post 

Я хочу сделать что-то подобное для OrderedDict и defaultdict. Но, разумеется, defaultdict имеет другую подпись __init__ , поэтому она требует дополнительной работы. Какой самый чистый способ решить эту проблему? Я использую Python 3.3.

Я нашел хорошее решение здесь: https://stackoverflow.com/a/4127426/336527 , но я подумал, что, возможно, из-за дефолта можно сделать это еще проще?

2 Solutions collect form web for “подклассы из OrderedDict и defaultdict”

Наследование от OrderedDict как и в ответе, с которым вы связаны, является самым простым способом. Это большая работа для реализации упорядоченного хранилища, чем для получения значений по умолчанию из заводской функции.

Все, что вам нужно реализовать для defaultdict – это немного настраиваемая логика __init__ и чрезвычайно простая __missing__ .

Если вы вместо этого наследуете defaultdict , вам необходимо делегировать или повторно реализовать по крайней мере __setitem__ , __delitem__ и __iter__ для воспроизведения операции в порядке. Вы все еще должны выполнять настройку в __init__ , хотя вы можете унаследовать или просто отказаться от некоторых других методов в зависимости от ваших потребностей.

Взгляните на оригинальный рецепт или любой другой, связанный с другим вопросом переполнения стека, для чего это повлечет за собой.

Я нашел способ подклассировать их обоих, но не уверен, есть ли ошибки:

 class OrderedDefaultDict(defaultdict, OrderedDict): def __init__(self, default, *args, **kwargs): defaultdict.__init__(self, default) OrderedDict.__init__(self, *args, **kwargs) 
  • Как напечатать следующую строку в python
  • Элементы словаря цикла Python через графический интерфейс tkinter с помощью кнопки
  • Использовать графический интерфейс для открытия каталога в Python 3
  • Печать переменной, выбранной случайным числом
  • Как получить количество списков с определенным элементом?
  • Как построить объект TarFile в памяти из байтового буфера в Python 3?
  • Добавление всех номеров из списка вместе (не суммирование). Python 3.3.2
  • Как я могу улучшить загрузку процессора при использовании модуля многопроцессорности?
  •  
    Interesting Posts for Van-Lav

    Что такое метод __del__, Как его называть?

    Python: запись в память другого процесса под Linux

    Процесс получил электронную почту с Python или Django?

    Как я могу выводить, какие SUDs генерируют / получают?

    Без потерь сжатия изображений на django

    Django formwizard: передача данных между формами

    Зачем мне нужно развертывать приложение по умолчанию, прежде чем я смогу развернуть несколько сервисов в GCP?

    easy_install cx_Oracle (пакет python) в Windows

    Процесс Python, потребляющий все большее количество системной памяти, но heapy показывает примерно постоянное использование

    Как выполнить необработанный SQL в приложении SQLAlchemy-flask

    Набор данных цифр Sklearn

    FutureWarning при сравнении объекта NumPy с «None»

    Как использовать numpy для добавления любых двух элементов в массив и создания матрицы?

    Хероку оттолкнул из-за ошибки / распространения ошибки. Каков обходной путь?

    numpy для установки элементов массива в значение, заданное списком индексов

    Python - лучший язык программирования в мире.