Использование упорядоченного словаря в качестве объектного словаря в Python

StackOverflow https://stackoverflow.com/questions/455059

  •  19-08-2019
  •  | 
  •  

Вопрос

Я не знаю, почему это не работает:

я использую одикт класс из ПЭП 372, но я хочу использовать его как __dict__ член, то есть:

class Bag(object):
    def __init__(self):
        self.__dict__ = odict()

Но по какой-то причине я получаю странные результаты.Это работает:

>>> b = Bag()
>>> b.apple = 1
>>> b.apple
1
>>> b.banana = 2
>>> b.banana
2

Но попытка получить доступ к реальному словарю не работает:

>>> b.__dict__.items()
[]
>>> b.__dict__
odict.odict([])

И это становится еще более странным:

>>> b.__dict__['tomato'] = 3
>>> b.tomato
3
>>> b.__dict__
odict.odict([('tomato', 3)])

Я чувствую себя очень глупо.Можете ли вы мне помочь?

Это было полезно?

Решение

Ближайший ответ на ваш вопрос, который я могу найти, находится по адресу

Другие советы

Если вы ищете библиотеку с доступом к атрибуту OrderedDict, пакет orderattrdict предоставляет это.

>>> from orderedattrdict import AttrDict
>>> conf = AttrDict()
>>> conf['z'] = 1
>>> assert conf.z == 1
>>> conf.y = 2
>>> assert conf['y'] == 2
>>> conf.x = 3
>>> assert conf.keys() == ['z', 'y', 'x']

Раскрытие: я создал эту библиотеку. Думаю, это может помочь будущим поисковикам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top