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