Python之重写__init__()与__new__()方法时的注意事项

__new__()
通常用于控制生成一个新实例的过程。它是类级别的方法。

在python中,真正创建实例的是__new__方法,这个方法是基于类的层面。
__new__()至少需要传递一个参数cls,cls表示需要实例化的类。
__new__()必须要有返回值,一般都是返回父类new方法出来的实例,即return super()__new__(cls)。
__new__()的返回值必须为当前类的实例时,__init__方法才会被调用。
如果(新式)类中没有重写__new__()方法,Python默认是调用该类的直接父类的__new__()方法来构造该类的实例,如果该类的父类也没有重写 __new__(),
那么将一直按此规矩追溯至object的__new__()方法,因为object是所有新式类的基类。
依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。

__init__()
__init__ 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。

__init__()的第一个参数必须为self,用来接收__new__方法的返回值,即当前类实例。
__init__()的参数必须要和__new__参数保持一致。

posted @ 2021-09-30 08:48  sjfgod  阅读(308)  评论(0编辑  收藏  举报