python学习之单例模式和魔法方法属性
__init__()和__new__()
1.1 __init__():初始化对象
class Test(object):def __init__(self):print("这是__init__") te = Test()
1.2__new__() : object基类提供的内置的静态方法
作用: 1.在内存中为对象分配空间 2.返回对象的引用
class Test(object):def __init__(self):print("这是__init__")def __new__(cls, *args, **kwargs): #代表类本身print("这是__new__")res = super().__new__(cls) #方法重写,复用object中的__new__()方法res里面保存的是实例对象的引用,__new__()是静态方法,形参里面有cls,实参就必须传return res#注意:重写__new__()一定要return super().__new__(cls),否则python解释器得不到分配空间的对象引用,就不会调用__init__() te = Test() print("te:",te)
执行步骤:
一个对象的实例化过程:首先执行__new__(),如果没有重写__new__(),则默认调用object里面的__new__(),返回一个实例对象,
然后再去调用__init__(),对对象进行初始化
class Person(object):def __new__(cls, *args, **kwargs):res = super().__new__(cls)print("返回值:",res)return resdef __init__(self,name):self.name = name #实例化属性print(f"名字叫{self.nam