Source code for niftynet.utilities.decorators
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function
from functools import wraps
[docs]def singleton(cls):
"""Decorate a class as singleton.
Inspired by: https://wiki.python.org/moin/PythonDecoratorLibrary#Singleton
"""
cls.__new_original__ = cls.__new__
@wraps(cls.__new__)
def singleton_new(cls, *args, **kw):
it = cls.__dict__.get('__it__')
if it is not None:
return it
cls.__it__ = it = cls.__new_original__(cls, *args, **kw)
it.__init_original__(*args, **kw)
return it
cls.__new__ = staticmethod(singleton_new)
cls.__init_original__ = cls.__init__
cls.__init__ = object.__init__
return cls