浅谈python的__init__
和__new__
方法
首先我对__new__
与__init__
进行一个总结,让读者对这两个方法有一个系统的认识,接着再对每一点进行逐一进行分析,希望这篇文章对正在追梦的朋友有一点帮助
__new__
方法和__init__
方法会在创建对象时自动被调用,__new__
方法在__init__
方法之前被调用__new__
至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别,__init__
有一个参数self,就是这个__new__
返回的实例,__init__
在__new__
的基础上可以完成一些其它初始化的动作,__init__
不需要返回值__new__
必须要有返回值,返回实例化出来的实例,这点在自己实现__new__
时要特别注意,可以return父类(通过super(当前类名,cls))__new__
出来的实例,或者直接是object的__new__
出来的实例,如果__new__
方法没有return,__init__
方法不会被调用- 如果
__new__
创建的是当前类的实例,会自动调用__init__
函数,通过return语句里面调用的__new__
函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__
函数,也不会调用其他类的__init__
函数。 __new__
始终都是类的静态方法,即使没有被加上静态方法装饰器。
下面看一个实例
class A:
def __new__(cls, *args, **kwargs):
print('我是__new__方法')
def __init__(self, age)