Solución super simple crea una lista llamada CLASSES con tus orden que tu quieras de tus clases. Recuerda poner la lista al final de tu modulo.
Ejemplo CLASSES = [B, A] El día 22 de agosto de 2013 13:26, Juan BC <jbc.deve...@gmail.com> escribió: > gracias :) > > El día 22 de agosto de 2013 00:48, Olemis Lang <ole...@gmail.com> escribió: >> On 8/21/13, Juan BC <jbc.deve...@gmail.com> wrote: >>> Estoy haciendo un pequeño script que recibe otro script por parametro >>> (osea un plugin) y lo que necesito es ordenar las clases dentro de el >>> plugin en el orden que fueron declaradas: >>> >>> en un ejemplo trivial seria algo asi: >>> >>> # plugin.py >>> >>> class B(object): pass >>> class A(object): pass >>> >>> # manager.py >>> >>> import plugin >>> >>> classes = [k, v for k,v in vars(plugin).items()] >>> classes.sort(<CODIGO PARA ORDENAR B antes que A>) >>> >> >> Ejemplos rápidos con Python 2.x >> >> Sugerencia #1 : Solución genérica >> >> {{{#!py >> >>>>> class TimestampedType(type): >> ... def __init__(self, *args, **kwargs): >> ... super(TimestampedType, self).__init__(*args, **kwargs) >> ... self.__timestamp__ = datetime.now() >> ... >>>>> from datetime import datetime >>>>> class A: >> ... __metaclass__ = TimestampedType >> ... >>>>> class B: >> ... __metaclass__ = TimestampedType >> ... >>>>> class C: >> ... __metaclass__ = TimestampedType >> ... >>>>> classes = [B, A, C] >>>>> sorted(classes, key=lambda cls: cls.__timestamp__) >> [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>] >> }}} >> >> Sugerencia #2 : Meta-cache (similar a ComponentMeta.cache de Trac + >> Bloodhound) >> >> {{{#!py >> >>>>> class PluginMeta(type): >> ... __cache__ = [] >> ... def __init__(self, *args, **kwargs): >> ... super(PluginMeta, self).__init__(*args, **kwargs) >> ... self.__cache__.append(self) >> ... >>>>> class A: >> ... __metaclass__ = PluginMeta >> ... >>>>> class B: >> ... __metaclass__ = PluginMeta >> ... >>>>> class C: >> ... __metaclass__ = PluginMeta >> ... >>>>> PluginMeta.__cache__ >> [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>] >> }}} >> >> En ambos casos se puede prescindir de la meta-clase explícita >> utilizando herencia >> >> -- >> Regards, >> >> Olemis - @olemislc >> >> Apache™ Bloodhound contributor >> http://issues.apache.org/bloodhound >> http://blood-hound.net >> >> Blog ES: http://simelo-es.blogspot.com/ >> Blog EN: http://simelo-en.blogspot.com/ >> >> Featured article: >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> http://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ > > > > -- > Juan B Cabral > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/