在学习python面向对象的时候,经常会接触
__init__()
方法,而__new__()
方法则较少接触,这里记录一下它们的作用及区别
[Python3]__init__
和 __new__
的区别
- 首先
__init__
是一个实例方法,而__new__
是一个静态方法 __init__()
就像他的名字一样,是用于初始化对象的,在对象已经生成之后被自动调用,因此有了我们经常用到的类似如下的语句
def __init__(self, arg):
super().__init__(arg)
- 而
__new__
方法则是创建对象的方法,是一个静态方法,至少要有一个参数cls
:当前要生成的对象的类名,当我们用类名+()
的形式来创建对象的时候,首先会自动调用__new__
方法来创建对象,cls
参数也自动给出,之后再使用__init__
来初始化对象
(这一点上python就和C系列语言或是java不太一样,个人认为这个设计更加体现出了python的动态语言特性)