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