Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. from abc import ABCMeta, abstractmethod, abstractproperty
  2.  
  3. class Singleton(type):
  4. _instances = {}
  5. def __call__(cls, *args, **kwargs):
  6. if cls not in cls._instances:
  7. cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
  8. return cls._instances[cls]
  9.  
  10. class GenericLogger(object):
  11. __metaclass__ = ABCMeta
  12.  
  13. @abstractproperty
  14. def SearchLink(self): pass
  15.  
  16. class Logger(GenericLogger):
  17. __metaclass__ = Singleton
  18.  
  19. @property
  20. def SearchLink(self): return ''
  21.  
  22. a = Logger()
  23.  
  24. class SingletonABCMeta(ABCMeta):
  25. _instances = {}
  26. def __call__(cls, *args, **kwargs):
  27. if cls not in cls._instances:
  28. cls._instances[cls] = super(SingletonABCMeta, cls).__call__(*args, **kwargs)
  29. return cls._instances[cls]
  30.  
  31.  
  32. class GenericLogger(object):
  33. __metaclass__ = SingletonABCMeta
  34.  
  35. @abstractproperty
  36. def SearchLink(self): pass
  37.  
  38.  
  39. class Logger(GenericLogger):
  40. @property
  41. def SearchLink(self): return ''
  42.  
  43. >>> from abc import ABCMeta, abstractproperty
  44. >>> class SingletonABCMeta(ABCMeta):
  45. ... _instances = {}
  46. ... def __call__(cls, *args, **kwargs):
  47. ... if cls not in cls._instances:
  48. ... cls._instances[cls] = super(SingletonABCMeta, cls).__call__(*args, **kwargs)
  49. ... return cls._instances[cls]
  50. ...
  51. >>> class GenericLogger(object):
  52. ... __metaclass__ = SingletonABCMeta
  53. ... @abstractproperty
  54. ... def SearchLink(self): pass
  55. ...
  56. >>> class Logger(GenericLogger):
  57. ... @property
  58. ... def SearchLink(self): return ''
  59. ...
  60. >>> Logger()
  61. <__main__.Logger object at 0x1012ace90>
  62. >>> Logger()
  63. <__main__.Logger object at 0x1012ace90>
  64. >>> class IncompleteLogger(GenericLogger):
  65. ... pass
  66. ...
  67. >>> IncompleteLogger()
  68. Traceback (most recent call last):
  69. File "<stdin>", line 1, in <module>
  70. File "<stdin>", line 5, in __call__
  71. TypeError: Can't instantiate abstract class IncompleteLogger with abstract methods SearchLink
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement