这个要从 Python 的面向对象实例化的过程说起
类名 () 之后, 开辟一块内存空间, 然后调用__init__把空间的内存地址作为 self 的参数传递到函数的内部, 所有和 self 有关的参数, 属性都会和 self 关联起来, 执行__init__之后, self 就会自动返回到调用出
- class A:
- def __new__(cls, *args, **kwargs):
- o = object.__new__(cls)
- print('执行了 new',o)
- return o
- def __init__(self):
- print('执行 init',self)
- A()
- # 实例化的时候
- # 先创建一块对象的空间, 有一个指针能指向类 --> __new__
- # 调用 init --> __init__
执行结果
执行了 new <__main__.A object at 0x0000000001D927F0>
执行 init <__main__.A object at 0x0000000001D927F0>
所以__new__是在__init__之前执行,
__new__ 是在对象创建之前创建一个对象, 并将该对象返回给 init. 在创建类对象时调用
__init__ 在对象创建后, 对对象进行初始化. 在实例化时调用
来源: http://www.bubuko.com/infodetail-3299334.html