单例模式:就是永远用一个对象的实例

初级版

#初级版
class Foo(object):
    instance=None

    def __init__(self):
        pass

    @classmethod         # 类方法  类方法只能访问类变量,不能访问实例变量
    def get_instance(self):

        if Foo.instance:
            return Foo.instance

        else:

            Foo.instance = Foo()
            return Foo.instance

obj1=Foo.get_instance()
obj2=Foo.get_instance()

print(id(obj1),id(obj2))

高级版

#高级版

class Foo(object):

    instance =None

    def __init__(self):
        pass

    def __new__(cls, *args, **kwargs):

        if Foo.instance:

            return Foo.instance
        else:

            Foo.instance = object.__new__(cls,*args,**kwargs)

            return Foo.instance




obj1=Foo()
obj2=Foo()

print(id(obj1),id(obj2))