Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from abc import ABCMeta, abstractmethod, abstractproperty
- class Singleton(type):
- _instances = {}
- def __call__(cls, *args, **kwargs):
- if cls not in cls._instances:
- cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
- return cls._instances[cls]
- class GenericLogger(object):
- __metaclass__ = ABCMeta
- @abstractproperty
- def SearchLink(self): pass
- class Logger(GenericLogger):
- __metaclass__ = Singleton
- @property
- def SearchLink(self): return ''
- a = Logger()
- class SingletonABCMeta(ABCMeta):
- _instances = {}
- def __call__(cls, *args, **kwargs):
- if cls not in cls._instances:
- cls._instances[cls] = super(SingletonABCMeta, cls).__call__(*args, **kwargs)
- return cls._instances[cls]
- class GenericLogger(object):
- __metaclass__ = SingletonABCMeta
- @abstractproperty
- def SearchLink(self): pass
- class Logger(GenericLogger):
- @property
- def SearchLink(self): return ''
- >>> from abc import ABCMeta, abstractproperty
- >>> class SingletonABCMeta(ABCMeta):
- ... _instances = {}
- ... def __call__(cls, *args, **kwargs):
- ... if cls not in cls._instances:
- ... cls._instances[cls] = super(SingletonABCMeta, cls).__call__(*args, **kwargs)
- ... return cls._instances[cls]
- ...
- >>> class GenericLogger(object):
- ... __metaclass__ = SingletonABCMeta
- ... @abstractproperty
- ... def SearchLink(self): pass
- ...
- >>> class Logger(GenericLogger):
- ... @property
- ... def SearchLink(self): return ''
- ...
- >>> Logger()
- <__main__.Logger object at 0x1012ace90>
- >>> Logger()
- <__main__.Logger object at 0x1012ace90>
- >>> class IncompleteLogger(GenericLogger):
- ... pass
- ...
- >>> IncompleteLogger()
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- File "<stdin>", line 5, in __call__
- TypeError: Can't instantiate abstract class IncompleteLogger with abstract methods SearchLink
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement