Olvidé unas precisiones ...

On 8/23/13, Chema Cortes <pych...@gmail.com> wrote:
> El día 22 de agosto de 2013 02:59, Juan BC <jbc.deve...@gmail.com>
> escribió:
>> 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>)
>
> No es buena idea ésto que quieres hacer.

Sí es buena idea . Se hace en Trac + Bloodhound desde hace mucho
tiempo por varias razones .

> Por ejemplo, ¿dónde dirías
> que se "declaran" las clases si hago ésto?:
>
>   from plugin import *
>

Considerando q la petición original estaba relacionada con el órden de
instanciación d las clases , no veo la problemática de este ejemplo .
El import no influye en lo absoluto en la declaración de las clases ,
si es q se hace en el módulo plugin (q asumo q sea el caso).

Si se trata del # de la línea d código ... otros $20 USD ;)

> ¿Y si me da por hacer cosas como estas?
>
>   class A: pass
>
>   B = A
>
>   class A: pass
>

No pasa absolutamente nada . Ud acaba de declarar dos clases , una
después de la otra , las dos con el nombre A . B es simplemente el
nombre d una variable q se registra en el namespace local .

> Hay dos clases, pero en verdad he redeclarado 'A'.
>

No (ver más abajo) ... desde el punto d vista del modelo de plugins
hay dos clases completamente diferentes con el mismo nombre ; lo cual
puede traer implicaciones e.g. en Trac + Bloodhound la segunda clase
nunca será configurable mediante ExtensionOption (si las dos clases
están habilitadas en trac.ini ;) .

Ahora este comentario no es 100% preciso pq la metaclase podría
garantizar la únicidad del nombre de los plugins (clases) y remplazar
la primera instancia d A en el cache con la segunda ... pero eso ya
son circunstancias más sofisticadas . Anteriormente estaba hablando a
temperatura y presión estándar ;)

[...]

-- 
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/

Responder a