码迷,mamicode.com
首页 > 其他好文 > 详细

day26 面向对象 单例模式总结

时间:2018-05-28 22:41:13      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:ase   变量   metaclass   att   手动   return   turn   pytho   装饰器   

 

如果是在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 面向对象 单例模式总结

标签:ase   变量   metaclass   att   手动   return   turn   pytho   装饰器   

原文地址:https://www.cnblogs.com/2012-dream/p/7881750.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!