Ayunda con un idiom de python

Chema Cortes py en ch3m4.org
Mar Jun 13 12:30:49 CEST 2006


Cesar Ortiz escribió:
> Para satisfacer curiosisdades... esta sacado de un stub que genera el
> script
> wsdl2py de ZSI.
> Dicho script genera unas funciones de ayuda con la opción -b, pero necesita
> python 2.4.
> Yo ahora mismo estoy usando python 3.5 con lo cual tengo que hacer alguna
> cosilla a manubrio (cosas que con la opción -b ya se hacen) si quiero
> mantener la versión de python.
> El problema es que esas funciones se generan dinámicamente, y  el punto
> para
> empezar a mirar era ese... Me pareció un codigo curioso que posiblemente
> fuera un 'idiom' de python.

Para satisfacer tu curiosidad, lo importante de este código es que la
clase Holder se crea dentro de una clausura, esto es, se crean tantas
clases Holder como instancias haya de la clase A, y cada clase tendrá un
atributo de clase que enlaza con la instancia.


>> > class A:
>> >        def __init__(self):
>> >                class Holder:
>> >                        typecode = self
>> >                        def __init__(self):
>> >                                 self.valor = None
>> >
>> >                self.pyclass = Holder


Yo a ésto no sé si lo llamaría "idiom" (modismo) de python.

Si te fijas, se da una referencia circular:

  self == self.pyclass.typecode

A parte de si es o no un modismo, sí que es el típico caso que consigue
que el "recolector de basura" se despiste. En uso normal, es posible que
nunca consigas borrar de memoria ni la instancia ni su clase Holder
asociada.


-- 
Chema Cortés (py en ch3m4.org)
"Proudly made on earth by generic humanoid carbon units"




Más información sobre la lista de distribución Python-es