一、Python中的 __init__
和 __new__
方法简介
1.1 __init__
和 __new__
方法功能简介
__init__
方法,它是一个初始化方法,主要用于在创建对象后初始化该对象的属性;
__new__
方法,用于创建对象。
当在类中定义 __new__
方法,__init__
方法的时候,python首先调用 __new__
方法来创建对象,然后再调用 __init__
方法来初始化对象的属性。
大多数程序语言中,只需要构造函数同时完成创建和初始化对象的方法,但是python却同时具有构造函数和初始化器。
例如下面的代码:
|
|
在上述代码中,在 Name类中定义了 __new__
. 方法 和 __init__
方法。__new__
方法接受cls参数,该参数用于引用类,调用的时候,它会打印消息“Called the new method”信息。
紧接着,__init__
方法会被调用,并且将实例传递给self参数。最后,再使用 Name() 语句调用 Name类时,将得到如下的输出结果:
|
|
从上述结果中可以知道类在初始化的时候,会先调用__new__方法,然后再调用__init__方法。
1.2 __new__
方法
如下所示:
|
|
在上面的示例代码中,使用 __new__
方法在实例化时自定义对象。此外,定义了继承自内置类型str的类Reverse,重写 __new__
方法以在创建对象之前将sequence反转。
需要注意的是,这一功能无法使用 __init__
实现,如果说,你尝试这样做,结果将是一个错误值。
1.3 __init__
方法
__init__
方法通常用于初始化对象的属性(带或不带默认值),举例如下所示:
|
|
在上面的代码中,定义了一个 Language类 和 __init__
方法,它接受lang和year参数,默认值为"Python"和1991。
而当不带参数调用Language类的时候,__init__
方法会将lang和year设置为其默认值。
二 总结
总的来说,python 中的类有构造函数和初始化方法的概念。__new__
方法是构造函数方法,__init__
方法则是初始化方法。
python首先会调用 __new__
方法创建对象,然后再调用 __init__
方法初始化对象属性。