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)