Tengo este problema escribiendo una pequeña GUI lib que asigna clases a simples vistas de tabla. Cada miembro de clase de un determinado tipo = columna y el orden de las columnas es importante. Pero ...Iterar a través de los miembros de la clase en orden de su declaración
class Person(object):
name = None
date_of_birth = None
nationality = None
gender = None
address = None
comment = None
for member in Person.__dict__.iteritems():
if not member[1]:
print member[0]
de salida:
comment
date_of_birth
name
address
gender
nationality
...
salida uf, el oder consiguió todo mezclado ... desea:
name
date_of_birth
nationality
gender
address
comment
¿Hay una manera de hacerlo sin mantenimiento OrderedDict()
adicional de columnas?
Un dict es, por definición, desordenado, por lo que no puede confiar en ningún pedido de atributos de clase y tendrá que seguir ordenando en otro lugar. –
Sólo un pensamiento, un poco desagradable, pero ¿sería posible cambiar '__dict__' por un dict ordenado? Podría ser mejor mantener el orden en otro lugar, pero podría ser genial ver – GP89
@MartijnPieters no es cierto, puede hacerlo a través de una metaclase. De hecho, ese caso de uso se menciona explícitamente tanto en la metaclass Python 3.x PEP (3115) como en la PEP OrderedDict (372). –