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 面向对象 单例模式总结的主要内容,如果未能解决你的问题,请参考以下文章