标签:
liuxiaoyan@development:~/mysite$ cat Singleton.py class Singleton(type): """Singleton Metaclass""" def __init__(cls, name, bases, dic): super(Singleton, cls).__init__(name, bases, dic) cls.instance = None def __call__(cls, *args, **kwargs): if cls.instance is None: cls.instance = super(Singleton, cls).__call__(*args, **kwargs) return cls.instance class MyClass(object): __metaclass__ = Singleton def __init__(self,arg): self.arg = arg myClass1=MyClass("myClass1") myClass2=MyClass("myClass2") print myClass1 is myClass2
liuxiaoyan@development:~/mysite$ python Singleton.py
True
liuxiaoyan@development:~/mysite$ cat Singleton.py class Singleton: def __init__( self, decorated ): self._decorated = decorated def Instance( self ): try: return self._instance except AttributeError: self._instance = self._decorated return self._instance def __call__( self ): raise TypeError( ‘single instance allowed‘ ) @Singleton class MyClass: def __init__( self ): print( ‘created‘ ) #myClass=MyClass() #不能再用这种方式创建MyClass实例,会产生异常
#用以下方法创建实例 myClass1=MyClass.Instance() myClass2=MyClass.Instance() print myClass1 is myClass2 print id(myClass1) print id(myClass2) liuxiaoyan@development:~/mysite$ python Singleton.py True 140716352778528 140716352778528
标签:
原文地址:http://www.cnblogs.com/starof/p/4315701.html