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/

Responder a