Spaces:
Sleeping
Sleeping
| from abc import ABCMeta | |
| # ABCMeta is a subclass of type, extending ABCMeta makes this metaclass is compatible with some classes | |
| # which extends ABC | |
| 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] | |