Creating a singleton in Python

A singleton is a design pattern that allows you to ensure that a class has only one instance. Here's one way you can implement a singleton in Python:

class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance

To use this singleton class, you would simply need to call the __new__ method on the class, like this:

class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance

s1 = Singleton()
s2 = Singleton()

print(s1 == s2)

This will create two objects, but they will both be references to the same instance of the Singleton class, because the __new__ method creates the instance only if it doesn't already exist.

Watch a course Python - The Practical Guide

Note that this implementation of the singleton pattern uses the __new__ method, which is a special method in Python that is called when an object is instantiated. The __new__ method is called before the __init__ method, and it is responsible for returning a new instance of the class. By overriding the __new__ method, we can customize the way that instances of the Singleton class are created.