day26 面向对象 单例模式总结

Posted 2012-dream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
                
        class MyClass(object):
            __metaclass__=Singleton

 

 

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

以上是关于day26 面向对象 单例模式总结的主要内容,如果未能解决你的问题,请参考以下文章

面向对象设计模式 总结归纳 02单例模式

Java面向对象--单例(Singleton)设计模式和main方法

PHP之单例模式

JAVA知识总结:单例模式和多态

Python-面向对象-Day7

面向对象