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