__init__ 和 __new__区别
1. 从传递参数角度看,__init__第一个参数是实例本身, __new__传递的是类本身
2. 从执行顺序角度看,__new__方法执行在 __init__方法之前
3. 从功能角度看, __new__是控制对象实例过程,在对象生成之前就执行完毕, __init__是用来完成对象的实例化,在对象生成之后给对象初始化参数
4. 从差异性角度看, __new__不返回 super().__new__(cls),则不会执行 __init__方法,也就是通过父类中的__new__启动 __init__函数实例化也就是object类
from random import randint class BeiMenChuiXue: def __new__(cls, *args, **kwargs): # 启动实例化 print("__new__") r = super().__new__(cls) # 自定义初始化函数 r.beimenchuixue(*args, **kwargs) return r def beimenchuixue(self, numbers, name): print("__init__") self.numbers = numbers self.name = name if __name__ == ‘__main__‘: numbers = [randint(-10, 10) for _ in range(20)] bei_men_chui_xue = BeiMenChuiXue(numbers, "北门吹雪") print(bei_men_chui_xue.numbers)
原文地址:https://www.cnblogs.com/2bjiujiu/p/9142496.html
时间: 2024-10-01 22:29:37