A long time has passed since I last wrote a Singleton. Definitively, we rarely write singleton patterns in Python because we can represent singletons as variables in a module, and import them everywhere - see my strategy for logging library wide.
However, how should we construct a singleton class which represents a state that is initialized (loaded/read) together with the class first instantiation and for which we don't want the whole loading process to be repeated in case the singleton class is instantiated again at a different stage of the runtime?
Well, here it is:
class MyClass:
_state = None
def __new__(cls, *args, **kwargs):
if cls._state:
print('State already exists, returning existing state.')
return cls._state
elif cls._state is None:
cls._state = super().__new__(cls)
return cls._state
def __init__(self, arg):
self.arg = 1
a = MyClass(1)
print(a.arg) # 1
b = MyClass(2)
print(b.arg) # 1
assert a is b # True
Enjoy and Cheers,
Top comments (0)