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

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

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值