python学习 __new__方法/创建单例对象

class Dog(object):
    def __init__(self):
        print('__init__方法')

    def __del__(self):
        print('__del__方法')

    def __str__(self):
        print('__del__方法')
        return "对象的描述信息"

    def __new__(cls, *args, **kwargs): #cls此时是Dog指向的那个类对象
        # print(id(cls))
        print('__new__方法')
        return object.__new__(cls)

# print(id(Dog))
xtq=Dog()
"""
Dog()相当于要做三件事:
1、调用__new__方法来创建对象,然后找一个变量接收__new__的返回值,这个返回值表示 创建出来的对象的引用
2、__init__(刚刚创建出来的对象的引用)
3、返回对象的引用
"""

 

class Dog(object):
    __instance=None
    __init_flag=False

    # 创建单例对象(意思就是只创建一次对象,也就是不管创建几次,对象都是同一个)
    def __new__(cls, *args, **kwargs):
        if cls.__instance==None:
            cls.__instance=object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance  #return 返回上一次创建的对象的引用

    #只初始化一次对象
    def __init__(self,name):
        if self.__init_flag==False:
            self.__init_flag=True
            self.name=name

dog=Dog('哈哈')
print(dog.name)
print(id(dog))
dog1=Dog('嘿嘿')
print(dog1.name)
print(id(dog1))

 

posted on 2019-07-31 22:04  cherry_ning  阅读(171)  评论(0)    收藏  举报

导航