__str__和__del__
__str__
str 会在打印对象时自动触发,然后将返回值(必须是字符串类型)当做本次打印的结果输出
class People:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
print('运行了打印功能')
return f'{self.name} {self.age}'
obj = People('小辣椒同学', 18)
print(obj.__str__())
# 运行了打印功能
# 小辣椒同学18
# 打印对象
print(obj)
# 运行了打印功能
# 小辣椒同学18
__del__
在清理对象时触发,会先执行该方法,当程序运行时不仅占用了内存还系统资源值,当程序不需要某些系统资源时,清理对象前告诉操作系统回收相关系统资源(打开的文件)
class People:
def __init__(self, name, age):
self.name = name
self.age = age
self.x = open('a.txt',mode='w')
# self.x = 占据的是操作系统资源
def __del__(self):
print('run...')
# 发起系统调用,告诉操作系统回收相关的系统资源
self.x.close()
obj = People('小垃圾同学',18)
print('程序运行结束')
#打印'程序运行结束',程序运行结束,清理对象obj,触发__del__执行,打印'run...''
'''
程序运行结束
run...
'''
del obj # obj.__del__()
print('程序运行结束')
#del obj,触发__del__执行,打印'run...,然后'打印'程序运行结束',程序运行结束。