python类中的__init__和__new__方法
Python中类:
Python中在创建类的过程中最先调用的不是__init__方法而是__new__方法,__new__方法是一个静态方法,在创建一个类对象时其实是通过__new__方法首先创建出一个类实例,然后通过__init__方法初始化这个实例对象。
class Dog(object): def __init__(self): print("----init方法-----") def __del__(self): print("----del方法-----") def __str__(self): print("----str方法-----") return "对象的描述信息" def __new__(cls):#cls此时是Dog指向的那个类对象 #print(id(cls)) print("----new方法-----") return object.__new__(cls) #print(id(Dog)) xtq = Dog() ---------------------
上例中代码执行结果是:
----new方法-----
----init方法-----
----del方法-----
由此可以看出当实例化一个类对象时最先调用的就是__new__方法。
__new__方法至少要有一个参数cls,代表要实例化的类,此参数在实例化时由python解释器自动提供。
__new__方法必须要有返回值,返回实例化出来的实例,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例。
__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其他的初始化的动作,__init__不需要返回值。
class Dog(object): def __init__(self,name): self.name = abs(name) print("----init方法-----") print(self.name) def __del__(self): print("----del方法-----") def __str__(self): print("----str方法-----") return "对象的描述信息" def __new__(cls,name):#cls此时是Dog指向的那个类对象 #print(id(cls)) print("----new方法-----") return object.__new__(cls) #print(id(Dog)) xtq = Dog(15.00)
修改后给类对象添加参数如果类带参数__new__和__init__中也要带上参数。