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/

Responder a