Python中__new__() 和 __init__()的联系与区别——尚学堂Python笔记

时间:2021-05-21 20:42:37

 

__new__() 和 __init__()

 

class A(object):
    def _init(self):
        print(“这是init方法")
    def_new(c1s):
        print(“这是new方法”)
        return object.new_(c1s)

 

总结

  •  __new__() 为构造函数(构造实例),__init__() 则是初始化函数(初始化实例)。
  • 这两个方法都属于*父类object所有,所以再在子类中定义,属于方法重写,此时属于成员方法。
  • __new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供
  •  __new__必须要有返回值,返回实例化出来的实例,这点在自己实现_new_时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例
  • __init_有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值

 

注意事项

如果被重写的__new__()方法没有返回实例化出来的实例,如:

 Python中__new__() 和 __init__()的联系与区别——尚学堂Python笔记

 

运行结果为:

 Python中__new__() 和 __init__()的联系与区别——尚学堂Python笔记

 

可见,__init__()方法并没有被执行,此时如果print(u),打印结果为:None。

 

解决方法:在被重写的__new__()方法中,以csl为参数调用父类的__new__()方法

 Python中__new__() 和 __init__()的联系与区别——尚学堂Python笔记