Python-单例模式-只初始化一次

来源:互联网 发布:淘宝美工都需要做什么 编辑:程序博客网 时间:2024/05/21 22:14

单例模式 只初始化一次

单例模式创建的原理就是借用了私有类属性的性质,我们知道私有类属性不能直接在类外被修改,所以用私有类属性的状态当做条件来控制类内方法的调用

下面代码中的__species负责控制__new__方法,保证实例对象只能被创建一次,创建多个对象,均指向同一个数据内存位置

__first_init负责控制__init__方法,保证再次创建的对象不能更改初始化的内容

class Animal(object):    __species = None    __first_init = True    def __new__(cls, *args, **kwargs):        if cls.__species == None:            cls.__species = object.__new__(cls)        return cls.__species    def __init__(self,name):        print("-----init----")        if self.__first_init:            self.name = name            self.__class__.__first_init = False            # 相当于Animal.__first_init = False    def __str__(self):        return "-------str---%s" %self.nameif __name__ == '__main__':    dog = Animal('二哈')    print(dog)    print(id(dog))      dog2 = Animal('金毛')    print(dog)    print(id(dog2))执行结果:-----init-----------str---二哈139764904013104-----init-----------str---二哈139764904013104调用new方法必须要有return, 返回创建的实例对象或者是父类的__new__方法创建实例对象

由执行结果可知,两次创建的实例对象指向了同一个id,即 创建单例模式
第二次创建的实例对象dog2“金毛”,并未创建成功,仍然是第一次创建出来的实例对象dog”二哈”,即 初始化一次

原创粉丝点击