在模式的学习中发现了之前没有留意过的点

在模式的学习中发现了之前没有留意过的点

init 和 new 方法

通常我们在类中使用__init__方法来初始化对象,

new()方法用于创建实例,类实例化之前会首先调用,它是class的方法,是个静态方法。而__init__()方法用户初始化实例,该方法用在实例对象创建后被调用,它是实例对象的方法,用于设置类实例对象的一些初始值。
如果类中同时出现了__init__()方法和__new__()方法,则先调用new()方法后调用__init__()方法。new()方法是创建实例的第一步,执行完了需要返回创建的类的实例,否则则报错,无法执行__init__()方法。其中,init()方法将不返回任何信息。
在调用顺序上 new 先于 init 调用,
单例模式的实现

class Mycls:
        _instance = None
       def __new__(cls):
             # 判断该类的属性是否为空;对第一个对象没有被创建,我们应该调用父类的方法,为第一个对象分配空间
             if cls._instance == None:
             # 把类属性中保存的对象引用返回给python的解释器
                      cls._instance = object.__new__(cls)
                      return cls._instance
            # 如果cls._instance不为None,直接返回已经实例化了的实例对象
              else:
                    return cls._instance
        def __init__(self):
                print('init')
my1=Mycls()
print(my1)
my2=Mycls()

猜你喜欢

转载自blog.csdn.net/weixin_45014634/article/details/143327027