有些事情,可能需要做些初始化操作,使用完成后需要收尾操作,对于此情况,with就能很好的派上用场了,举个栗子:
class CallFun(object):
def __init__(self, name):
print "__init__"
self.name = name
def runs(self):
print "runs调用了", self.name
def __enter__(self):
print "__enter__"
return self
def __del__(self):
print "__del__"
def __exit__(self, exc_type, exc_val, exc_tb):
print '__exit__'
def calls(name):
return CallFun(name)
with calls("cz9025") as call:
call.runs()
看下执行结果:
__init__
__enter__
runs调用了 cz9025
__exit__
__del__
首先实例化程序时,会先执行构造方法;
在执行with语句时,先执行了enter方法;
操作完成后,即with方法执行完成,
自动调用了exit方法:
其中exit中几个参数,
exc_type异常类型;exc_val异常内容;exc_tb异常所在位置。
del析构方法,函数结束后自动运行。
举个异常栗子:
在runs方法中添加一个异常
def runs(self):
self.name = 1/0
print "runs调用了", self.name
打印结果:
__init__
__enter__
__exit__
exc_type=>>> <type 'exceptions.ZeroDivisionError'>
exc_val=>>> integer division or modulo by zero
exc_tb=>>> <traceback object at 0x00000000031B9808>
__del__