__new__魔术方法

__new__魔术方法的功能是创建对象,至少有一个参数cls

__new__触发时机快于__init__,因为先创建对象,再去初始化对象,所以__new__快于__init__

new方法参数要和init方法参数一一对应,可以使用*args和**kwargs接受参数

当一个类里定义了一个__new__魔术方法,系统就不给你自动实例化对象,需要你自己手动创建对象,要借助父类object.__new__(cls)

如果__new__方法里什么都不写,默认返回的是一个None,实例化对象出来的也是一个None.

如果new方法返回不是本类对象,不会触发本类init构造方法

那么问题来了,__new__魔术方法有什么用呢,我不写系统自动不就给我创建该类的对象了吗,其实它作用是还可以返回其他类的对象,例如:

```

class MyClass():
a = 1
other_obj = MyClass()

class Boat():
def __new__(cls, *args, **kwargs):
return other_obj
def __init__(self):
print(‘你好‘)

obj = Boat()
print(obj.a)

# 打印结果 1

```

总结 : 因为new方法调用的不是本类对象,所以本类init方法不执行,所以也就能打印其他类的属性a

__new__魔术方法

上一篇:Zookeeper详细功能介绍


下一篇:docker知识5---docker网络