patron singleton
José Jachuf
jjachuf en gmail.com
Vie Sep 7 03:28:06 CEST 2007
Gabriel Genellina escribió:
> En Thu, 06 Sep 2007 21:56:26 -0300, José Jachuf <jjachuf en gmail.com>
> escribi�:
>
>> Hola este código lo encontré en Internet, y me permite implementar el
>> patron singleton. Funciona perfecto, pero parece haber sido escrito
>> por el mismo diablo. Cómo hace para funcionar?
>
> Para empezar, en Python no es necesario escribir nada especial para
> implementar un singleton: simplemente, usa un modulo. Un módulo *ES* un
> verdadero singleton de por sí.
> Por otro lado, podrias mirar en el Python Cookbook sobre este tema; una
> variante es el Borg ("todos somos uno")
Esto lo voy a ver.
> Singleton es una metaclase; es el tipo de la clase A. (Si no estuviera
> la linea __metaclass__ = Singleton, type(A) devolvería `type`, pero
> ahora devuelve `Singleton`).
> Cuando se define la clase A, se crea la instancia de la metaclase (que
> pasa a ser el tipo de A); cuando se crea una instancia de la clase A, se
> invoca el __call__ de la metaclase.
Debería leer un poco (o mucho) sobre metaclases.
Podría haberse implementado como herencia?
>
> Singleton se guarda un atributo privado __instance con la (unica)
> instancia de la clase A. Al principio vale None; cuando se pretende
> crear una instancia de A, si ya existía, devuelve ésa; sino, crea una
> (la única), se la guarda en __instance, y la devuelve.
cls es análogo al self (o al this)?
>
> Es la forma mas rebuscada de escribir un singleton que vi.
Había visto esta:
class Singleton:
__single = None
def __init__( self ):
if Singleton.__single:
raise Singleton.__single
Singleton.__single = self
que está en:
http://www.python.org/workshops/1997-10/proceedings/savikko.html
bastante más intuitiva, pero me gusto la la que mandé porque con sólo
agregar la línea
__metaclass__ = Singleton
cambio el comportamiento de mi clase
Muchas gracias Gabriel
Saludos
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es