patron singleton

José Jachuf jjachuf en gmail.com
Vie Sep 7 02:56:26 CEST 2007


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?

Lo podría usar, de hecho que ya lo estoy usando en una pequeña 
implementación, pero me gustaría entenderlo. Agradecería que alguien se 
animara a explicarlo.


class Singleton(type):
     def __init__(cls, name, bases, dct):
         cls.__instance = None
         type.__init__(cls, name, bases, dct)

     def __call__(cls, *args, **kw):
         if cls.__instance is None:
             cls.__instance = type.__call__(cls, *args,**kw)
         return cls.__instance

class A:
     __metaclass__ = Singleton
     def __init__(self, nombre = None):
         self.__nombre = nombre

     def Saludar(self):
         print "Hola", self.__nombre

     def SetNombre(self, nombre):
         self.__nombre = nombre


a1 = A('Yami')
a2 = A()
a3 = A()

assert a1 is a3

a1.Saludar()
a2.Saludar()
a2.SetNombre('Osi')
a3.Saludar()
a1.Saludar()

la salida es:

Hola Yami
Hola Yami
Hola Osi
Hola Osi




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