python的class机制内置了很多特殊的方法来帮助使用者高度定制自己的类,
这些内置方法都是以双下划线开头和结尾的,会在满足某种条件时自动触发。
我们以常用的__str__和__del__为例来简单介绍它们的使用。
1、__str__方法
__str__方法会在对象被打印时自动触发,print功能打印的就是它的返回值,
我们通常基于方法来定制对象的打印信息,该方法必须返回字符串类型
class People: def __init__(self, name, age): self.name = name self.age = age def __str__(self): # print('运行了...') return "<%s:%s>" %(self.name,self.age) obj = People('辣白菜同学', 18) # print(obj.__str__()) print(obj) # <'辣白菜同学':18> obj1=int(10) print(obj1) # 输出结果 # <辣白菜同学:18> # 10
2、__del__方法
__del__会在对象被删除时自动触发。
由于python自带的垃圾回收机制会自动清理python程序的资源,所以当一个对象只占用应用程序级资源时,完全没必要为对象定制__del__方法,但在产生一个对象的同时涉及到申请系统资源(比如系统打开的文件、网络连接等)的情况下,关于系统资源的回收,python的垃圾回收机制便派不上用场了,需要我们为对象定制该方法,用来在对象被删除时自动触发回收系统资源的操作
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) # del obj # obj.__del__() print('============>')
# 输出结果:
============>
run...
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) del obj # obj.__del__() print('============>') # 输出结果 # run... # ============>