Python基础-二1中常用的魔法方法之一就是构造方法,它在我们定义类的时候几乎都会用到。构造方法的主要作用是在初始化一个对象时给这个对象定义初始值。虽然我们一般很少定义__new__方法,但在一些开源框架中偶尔会遇到定义这个方法的类。实际上,__new__才是“真正的构造方法”,它会在对象实例化时第一个被调用,然后再调用__init__。它们之间的区别在于__new__的第一个参数是cls,而__init__的第一个参数是self;__new__返回一个实例,而__init__没有任何返回值,只做初始化操作。因为__new__返回一个实例对象,所以它可以给所有实例进行统一的初始化操作。__new__和__init__是对象的构造器,而__del__是对象的销毁器,它定义了当对象被垃圾回收时的行为。当对象需要在销毁时做一些处理的时候这个方法很有用,比如socket对象、文件对象。需要注意的是,当Python解释器退出但对象仍然存活的时候,__del__并不会执行。因此为了保险起见,当我们需要在对象销毁时做一些处理时,最好手动调用对象的销毁方法。
构造方法是Python中最常用的魔法方法之一,它在我们定义类的时候几乎都会用到,因为它非常重要。在Python中,我们要定义一个构造方法,只需要在类的内部定义名为__new__和__init__的两个方法就可以了。这两个方法有着不同的作用,__new__方法在对象实例化时第一个被调用,它负责创建对象并返回这个对象的实例;而__init__方法则在对象实例创建之后被调用,它负责对对象的属性进行初始化。这两个方法的区别主要在于__new__的第一个参数是cls,而__init__的第一个参数是self。此外,__new__返回一个实例对象,而__init__没有任何返回值,只进行属性的初始化操作。
需要注意的是,虽然__new__和__init__是对象的构造器,但它们并不是对象的销毁器。对象的销毁器是__del__方法。__del__方法定义了当对象被垃圾回收时的行为,当对象需要在销毁时做一些处理的时候,可以在__del__方法中定义相应的操作。比如,如果一个类创建了一些对外部资源的引用,比如文件对象、网络连接、数据库连接等,那么在__del__方法中可以释放这些资源,这样可以避免资源泄露。
值得一提的是,当Python解释器退出时,如果对象仍然存活,__del__方法并不会执行。这是因为在Python解释器退出时,会调用一些清理操作,这些清理操作有可能会导致对象的__del__方法被调用,但这并不是必然的。所以为了保险起见,在需要执行一些清理操作时,最好手动调用对象的销毁方法。
总之,构造方法是Python中非常重要的一个概念,它负责对象的初始化工作。在定义类的时候,我们几乎都会使用构造方法来给对象进行初始化。同时,对象的销毁器__del__方法也是非常有用的,它定义了当对象被垃圾回收时的行为,可以在此方法中进行一些资源的释放操作。理解和掌握构造方法和销毁器的使用,对于我们编写Python程序是非常有帮助的。