Python中的魔术方法——new和init的方法执行顺序
在python中内置好的特定方法,名称为‘__xx__’,在进行特定的操作时会被自动调用,这些方法称为魔术方法。
(1)__init__初始化一个类,在创建实例的对象时候,为其赋值时候使用。
(2)__str__将对象转换为字符串,测试的时候,打印对象的信息。
输出的结果是一串类似id的地址信息。
在类中定义__str__方法,里面返回要输出的数据内容:
class:
.....
def __str__(self):
return '我的名字是%s,我的颜色是%s'%(self.name,self.coloer)
然后在使用的时候直接打印对象名字printf(dog(对象名))
输出的就是return的信息,如果类中不加str,那么打印的就是对象的地址。
(3)__new__创建并且返回一个实例对象,调用一次就会得到一个对象。(经常用来做单例模式)
class:.....
def __new__(cls,*args,**kwargs): #创建对象实例的方法,每调用一次,就会生成一个新的对象。
cls就是class的缩写。
print("......new....函数的执行")
return object.__new__(cls) 必须return。
类创建新的对象的时候首先执行的是__new__创建新的对象,经过return后才能被__init__使用,再执行init。
所以新的对象创建的过程:new object = class(x,x,x)-->__new__-->return object.__new__(cls)-->__init__
其中的cls表示在当前的类下,cls就是代表这个类。
现有对象(new创建),对象返回后再执行init方法。
new应用场景:可以控制创建对象的一些属性限定,经常用来作单例模式的时候使用。
__new__和__init__的区别:
__new__是类的实例化方法,必须要返回该实例,否则对象创建不成功。
__init__是用来做实例对象的数据初始化的工作,也可以认为是实例的构造方法,接受类的实例self
并对其进行构造。
new执行是优先于init的。
__new__至少有一个参数是cls,代表要是实例化的类。
__class__方法,获得已知的对象的类 对象.__class__
__del__对象在程序运行结束后,进行对象销毁的时候调用这个方法,来释放资源。