Definition

It is a creational pattern that ensure that a class has only one instance and has a global access point.

Example

Note: Implementation detail isn’t that important.

class Singleton(object):
    _instance = None
 
    def __new__(cls):
        if cls._instance is None:
            print('Creating the object')
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance
 
a = Singleton()
b = Singleton()    # The same instance of the object is used because of the if-statement
assert a is b
 
# However above example isn't thread safe. 
import threading
 
class ThreadSafeSingleton:
    _instance = None
    _lock = threading.Lock()
 
    def __new__(cls):
        if cls._instance is None:
            with cls._lock:
                # Another thread could have created the instance
                # before we acquired the lock. So check that the
                # instance is still nonexistent.
                if not cls._instance:
                    cls._instance = super(ThreadSafeSingleton, cls).__new__(cls)
        return cls._instance