Guest
Public paste!

SingletonMetaClass --- Thinking in Python

By: a guest | Jul 14th, 2010 | Syntax: Python | Size: 0.79 KB | Hits: 43 | Expires: Never
Copy text to clipboard
  1. #: c01:SingletonMetaClass.py
  2. class SingletonMetaClass(type):
  3.   def __init__(cls,name,bases,dict):
  4.     super(SingletonMetaClass,cls).__init__(name,bases,dict)
  5.     original_new = cls.__new__
  6.     def my_new(cls,*args,**kwds):
  7.       if cls.instance == None:
  8.         cls.instance = original_new(cls,*args,**kwds)
  9.       return cls.instance
  10.     cls.instance = None
  11.     cls.__new__ = staticmethod(my_new)
  12.  
  13. class bar(object):
  14.   __metaclass__ = SingletonMetaClass
  15.   def __init__(self,val):
  16.     self.val = val
  17.   def __str__(self):
  18.     return `self` + self.val
  19.  
  20. x=bar('sausage')
  21. y=bar('eggs')
  22. z=bar('spam')
  23. print x
  24. print y
  25. print z
  26. print x is y is z
  27. #<hr>
  28. output = '''
  29. <__main__.bar object at 0x00793100>spam
  30. <__main__.bar object at 0x00793100>spam
  31. <__main__.bar object at 0x00793100>spam
  32. 1
  33. '''