domingo, septiembre 28, 2008

Singleton

Necesitaba encontrar un ejemplo sobre uso de metaclases en python, y me decanté por el patrón Singleton, ya que había visto algo.
Resumiendo... la mejor solución actual es usando metaclases y es:

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

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


No se si tiene algun problema, ya que no estoy nada puesto en metaclases. Para acabar unas referencias comentadas:
  • wiki-es: donde ví la implementación de metaclases. Pero el cçodigo aquçi incluido varia en que usa super.
  • wiki-en: no tiene la opción de metaclass
  • Gary Robinson, implementa un singleton siguiendo unas ideas de aquí. No he tenido tiempo de mirarlo. Pero lo dejo anotado, ya que puede merecer la pena echarle un ojo.

No hay comentarios: