понедельник, 24 июня 2013 г.

Pattern. Singleton (Одиночка).

Одиночка (англ. Singleton) в программировании — порождающий шаблон проектирования.
Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.

class Singleton(object): 
    __instance = None 
    def __new__(cls): 
        if cls.__instance is None: 
            cls.__instance = super(C, cls).__new__(cls) 
        else: 
            cls.__init__ = lambda x: None 
        return cls.__instance

Просмотрел массу решений, в том числе отсуда. В итоге больше понравилось одно из этих, его и опубликовал с небольшими изменениями.

UPD: А вот так еще краше получилось

class Singleton(object):
    def __new__(cls):
        if not hasattr(cls, 'instance'):
            cls.instance = super(Singleton, cls).__new__(cls)
        else:
            cls.__init__ = lambda x: None
        return cls.instance