Simple Python Singleton pattern

This module provides a simple way to define a class as a singleton.
Install
You can install this python module via pip:
pip install simple-singleton
Otherwise the module can be downloaded from PyPI: https://pypi.org/project/simple-singleton/
Usage
- Import the module:
from simple_signleton import Singleton
or:
from simple_signleton import SingletonArgs
- Create a class that uses one of the above meta classes:
class NewClass(metaclass=Singleton):
pass
or:
class NewClass(metaclass=SingletonArgs):
pass
Difference between Singleton
and SingletonArgs
The Singleton
class is a very basic implementation of the singleton pattern. All instances of a class are equal. Even if they are initialized with different parameters:
instance1 = SingletonClass(param="value")
instance2 = SingletonClass(param="different_value")
assert instance1 == instance2
print(instance2.param)
If you do not want this behavior, use the SingletonArgs
meta class. With this class only instances that are initialized with the same parameters are the equal:
instance1 = SingletonArgsClass(param="value")
instance2 = SingletonArgsClass(param="different_value")
instance3 = SingletonArgsClass(param="value")
assert instance1 == instance2
assert instance1 == instance3
print(instance2.param)
Usage in multi-threaded environments
The Singleton
and SingletonArgs
meta classes are not thread-safe!
To use them in a multi-threaded environment, please use the
ThreadSingleton
andThreadSingletonArgs
meta classes. They can be used exactly like the standard meta classes.