Singleton Utility¶
The singleton utility provides a class decorator, allowing to easily create singleton classes.
-
class
xobox.utils.singleton.Singleton(decorated)[source]¶ Decorator class to turn any other class into a lazy singleton.
This class must be applied as a decorator instead of inheriting from this class.
Restrictions
- The decorated class can define one
__init__function, but this constructor is restricted to theself,*argsand**kwargsarguments (in fact those must be present). - To get the singleton instance, the
get_instance()method has to be used. Trying to use__call__will result in aTypeErrorbeing raised. - The actual instance will not be created before
get_instance()has been called (lazy behaviour). - The decorated class cannot be inherited from. Therefore, this decorator can only be applied to final classes.
- This decorator shows good manners and takes care of
__doc__,__module__,__name__,__annotations__and__qualname__context of the decorated class. This allows care-free handling in conjunction with automated documentation extraction tools such as Sphinx autodoc or similar.
Parameters: decorated – The Python class to be wrapped. -
get_instance(*args, **kwargs)[source]¶ Returns the singleton instance. Upon its first call, it creates a new instance of the decorated class and calls its
__init__method. On all subsequent calls, the already created instance is returned. :param args: positional arguments to be passed to the wrapped class’ constructor :param kwargs: keyword arguments to be passed to the wrapped class’ constructor :return: instance of the singleton-decorated class.
- The decorated class can define one