Python中的__init__()、__new__()、__del__()方法
在类中,可以定义属性,也可以定义函数方法,其中有两个比较特殊的函数:构造函数、析构函数。
1、__init__()方法
__init__()方法是类实例化对象以后,对对象进行初始化的操作,也就是当通过类实例化对象以后,就会执行该函数,这样就可以把初始化的属性放在__init__(参数)方法中。
示例:
class Person: def __init__(self,name='',age='',height=''): # 声明一个对象属性姓名neme,初始值为空字符串 self.name = name # 声明一个对象属性年龄age,初始值为空字符串 self.age = age # 声明一个对象属性高度height,初始值为175cm,类型为字符串 self.height = '175cm' # 通过类实例化对象的时候,要通过给类名后面的括号里传参,保证__init__()方法里面的每一个参数都有值 p1 = Person('张三','17') p2 = Person('王五','19') # 通过“对象.方法”访问对象属性 print(p1.name) print(p1.height) print(p2.age) print(p2.height) 结果: 张三 175cm 19 175cm
温馨提示: 1、__init__()方法是在类创建对象后,自动调用的方法。 2、__init__()方法的作用是创建对象后,初始化对象的属性。 3、对象的属性被声明在__init__()方法中。
2、__new__()方法
__new__(参数)方法在构建实例对象之前就会被调用,至少被接收一个参数cls,cls代表要实例化的类,此参数在实例化时由Python解释器提供。__new__()方法必须有一个返回值,该值为实例化对象。
实例化类对象一般分为两种:
步骤一:
执行__new__()方法,该方法是在实例对象被创建之前调用,用于创建实例对象,然后返回实例对象。
步骤二:
执行__init__()方法,该方法是在实例对象被创建之后调用,用于设置对象属性的一些初始值。
也就是说,__new__()方法在__init__()方法之前被调用,__new__()方法返回的值将传递给__init__()方法,然后__init__()方法再给这个实例的属性字段赋初始值。
示例:
class NewClass: def __init__(self): print("这是一个init方法") def __new__(cls, *args, **kwargs): print("这是一个new方法") return super().__new__(cls) 结果: 这是一个new方法 这是一个init方法
温馨提示: __new__()方法返回的实例化对象,可以是直接返回父类__new__()方法的实例。在__init__()方法中,有一个参数为self,这个self其实就是__new__()方法返回的实例。__init__()方法其实就是对__new__()方法返回对象进行初始化,因此__init__()方法并不需要返回值。
3、__del__()方法
在实例化类对象时,一定会调用初始化函数__init__()来初始化对象的属性,那么在销毁对象时,也一定会调用到析构函数__del__()来销毁对象。
示例:
class Student: # 构造函数创建对象后,在初始化对象的属性时调用 def __init__(self,name = '',number = ''): self.name = name self.number = number print('调用构造') # 析构函数被Python的垃圾回收器销毁的时候调用 def __del__(self): print('调用析构') if __name__ == '__main__': sut = Student('作者','18') del sut 结果: 调用构造 调用析构
温馨提示:
当对象被创建并赋值给变量的时候,该对象的引用计数被设置为1,那么减少引用计数就是显式调用del变量名。当变量的引用计数为0的时候,变量就会被垃圾回收器自动回收,此时将调用析构函数。
posted on 2021-11-14 21:42 Test-Admin 阅读(137) 评论(0) 编辑 收藏 举报