• day26 面向对象 单例模式总结


    如果是在python2中,就需要手动继承object,

     基于__new__方法

    
            基于__new__方法
            class Foo(object):
                def __new__(cls,*args,**kwargs):
                    if not hasattr(cls,'_instance'):
                        cls._instance=super(Foo,cls).__new__(cls,*args,**kwargs)
                    return cls._instance     
     基于装饰器方法
    def foo(cls,*args,**kwargs):
                dic={}
                def _foo():
                    if cls not in dic:
                        dic[cls]=cls(*args,**kwargs)
                    return dic[cls]
                return _foo
                
            @foo
            class MyClass(object):
                x=2
                def __init__(self,x=1)
                    self.x=x
    基于元类metaclass实现
    class Singleton(type):
                def __init__(cls,*args,**kwargs):
                    super(Singleton,cls).__init__(name,bases,dict)
                    cls._instance=None
                def __call__(cls,*args,**kwargs):
                    if cls._instance is None:
                        cls._instance=super(Singleton,cls).__call__(*args,**kwargs)
                    return cls._instance
            
        # 在python2中:
    class MyClass(object): __metaclass__=Singleton
        
        # 在python3中
        class Myclass(metaclass=Singleton):
          pass

    知识点总结,封装,静态变量变成私有变量

  • 相关阅读:
    JS之函数声明与表达式
    任重道远!
    Java_Notes01
    Android_Application Fundamentals
    Android_Activity
    Android
    Linux下的实模式和保护模式
    spring注解原理
    开启aix SFTP日志 是否和链接SFTP有关呢
    Apache版本兼容性问题
  • 原文地址:https://www.cnblogs.com/2012-dream/p/7881750.html
Copyright © 2020-2023  润新知