首页 > 其他 > 详细

__new__魔术方法

时间:2021-07-30 08:52:17      阅读:25      评论:0      收藏:0      [点我收藏+]

__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__魔术方法

原文:https://www.cnblogs.com/jasonsheng/p/15077752.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!