Shortcuts

Source code for ding.utils.design_helper

from abc import ABCMeta


# ABCMeta is a subclass of type, extending ABCMeta makes this metaclass is compatible with some classes
# which extends ABC
[docs]class SingletonMetaclass(ABCMeta): """ Overview: Returns the given type instance in input class Interfaces: ``__call__`` """ instances = {} def __call__(cls: type, *args, **kwargs) -> object: """ Overview: Returns the given type instance in input class """ if cls not in SingletonMetaclass.instances: SingletonMetaclass.instances[cls] = super(SingletonMetaclass, cls).__call__(*args, **kwargs) cls.instance = SingletonMetaclass.instances[cls] return SingletonMetaclass.instances[cls]