Python 3 Singleton
Pošto Python kao jezik ne poznaje statičke atribute, potrebno je naći način da se ovo ograničenje zaobiđe. Pravi način da se ovo zaobiđe je meta-klasa. Prvo je potrebno definisati samu metaklasu:
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
Potom je potrebno primeniti ovu metaklasu:
class SingletonClassImplementation(BaseClass, metaclass = Singleton):
def __init__(self, *args, **kwargs):
super(SingletonClassImplementation, self).__init__(*args, **kwargs)
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
Potom je potrebno primeniti ovu metaklasu:
class SingletonClassImplementation(BaseClass, metaclass = Singleton):
def __init__(self, *args, **kwargs):
super(SingletonClassImplementation, self).__init__(*args, **kwargs)
Коментари
Постави коментар