天天看点

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__对象在程序运行结束后,进行对象销毁的时候调用这个方法,来释放资源。