单例和仅一次初始化Python3

# -*- coding:utf-8 -*-

class Dog(object):
    __instance = None

    __init_flag = False

    def __new__(cls,name):    #__new__方法用于创建对象,这里利用类属性进行判断,是否为第一次创建对象
        if cls.__instance == None:      #如果是第一次,则用cls.__instance类属性指向创建的对象的引用
            cls.__instance = object.__new__(cls)
            return cls.__instance           #并返回创建对象的引用
        else:
            return cls.__instance #再一次创建时,cls.__instance已经不是None了,这时else返回第一次创建对象的引用

    def __init__(self,name):      #__init__方法当创建完对象时既会被调用,这里也用类属性__init_flag  = False进行判断
        if self.__init_flag == False:      #第一次初始化时,将输入的参数存入实例对象属性中,并修改类属性__init_flag =True
            self.name = name 
            self.__init_flag = True

a = Dog('wangcai')
print(id(a))
print(a.name)
b = Dog('xiaowangcai')
print(id(b))
print(b.name)

猜你喜欢

转载自blog.csdn.net/sinat_41701878/article/details/79339911