zoukankan      html  css  js  c++  java
  • python singleton

    方法一:用元类的方式实现一个singleton。

    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

    方法二:用修饰类的方式实现一个Singleton。

    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
  • 相关阅读:
    android 四大组件
    apk 反编译
    通过 PC 远程控制 Android 的应用 -- 可以将手机屏幕投射显示到电脑上
    vmware 装 puppy
    vmware 装 puppy
    js prototype 添加属性对象
    js 百度云搜索框
    js 秒杀
    秒杀的性能和超卖
    [JOI2012春季合宿]Rotate (链表)
  • 原文地址:https://www.cnblogs.com/starof/p/4315701.html
Copyright © 2011-2022 走看看