__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__()方法没有返回实例化出来的实例,如:
运行结果为:
可见,__init__()方法并没有被执行,此时如果print(u),打印结果为:None。
解决方法:在被重写的__new__()方法中,以csl为参数调用父类的__new__()方法