DEV Community

João M.C. Teixeira
João M.C. Teixeira

Posted on • Edited on

Python Singletons

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
Enter fullscreen mode Exit fullscreen mode

Enjoy and Cheers,

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs