构造方法包括创建、初始化对象,在Python当中,先执行__new__方法,然后执行__init__方法,从官方文档可以看到:
也就是说,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数self,然后__init__在__new__的基础上上完成一些初始化的操作,如给这个实例设置一些参数,__init__不需要返回值,如下实例代码:
通过如下执行结果可以看出,TestOps类中__new__在__init__之前被调用,__new__的返回值(实例对象)与__init__方法的第一个参数self为同一个对象,然后__init__在__new__的基础上上完成一些初始化的操作,如 self.time = time.time(),同时__init__不需要返回值。
如果__new__创建的是当前类的实例(__new__(cls),通过cls来保证是当前类实例),会自动调用__init__函数。如果__new__创建的不是当前类的实例,就不会调用当前类的__init__函数,也不会调用其他类的__init__函数,如下实例代码:
可以看到当TestOps中__new__创建的不是当前类的实例,而是Other的实例时,没有调用当前类TestOps的__init__函数,也没有调用Other类的__init__函数,同时执行的common实例方法来自Other类,并不是当前TestOps类。
总结
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!