2015-04-11 4 views
1

Я разрабатываю код, который требует доступа к атрибутам класса в том же порядке, в котором они были объявлены. Я нашел следующий ответ на аналогичный вопрос: https://stackoverflow.com/a/4460034, однако, как было отмечено в комментарии, это не потоки безопасны. Я использую Python 2.7. Мне интересно, есть ли способ заставить python использовать OrderedDict при сборе атрибутов?Чтение атрибутов класса в том же порядке, что и в Python

Фактический прецедент должен иметь возможность определять Структуры, как это делается здесь (http://code.activestate.com/recipes/498149/), но решение должно быть потокобезопасным.

+0

Вы можете просто использовать '__slots__' в своем классе, я полагаю. – roippi

+1

Для меня это звучит как [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – orlp

+0

Да, вы можете, есть несколько связанных вопросов по SO. –

ответ

0

Ваша конкретная проблема имеет решение в Python3 с использованием метакласса. Это описано в the docs.

Однако он использует класс __prepare__, который не доступен в Python2.7. После некоторого googling я нашел this solution, что порты __prepare__ - Python2.7, но это невероятно взломанно и грязно.

Мне кажется, что у вас есть XY problem, и ваша проблема может быть решена с помощью другого подхода.

+0

@orip Спасибо, [Упомянутое решение] (https://gist.github.com/DasIch/5562625) именно то, что я искал. – pigeek

+0

@pigeek Если мой ответ решил вашу проблему, подумайте о ее маркировке, нажав галочку рядом с моим ответом. Это помогает будущим пользователям и дает мне и вам немного репутации. Кроме того, это ORLP, а не ORIP;) – orlp