python之with使用
with工作原理
紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法
代码演示
1 class TestWith(object): 2 3 def __init__(self): 4 super().__init__() 5 6 # __enter__()方法会在with后面的语句被求值后执行,并将这个方法的返回值返回给with语句后面as跟着的参数 7 def __enter__(self): 8 print("I'm enter function") 9 return "Foo" 10 11 # __exit__()方法会在with语句后面的语句块执行完后执行 12 def __exit__(self, types, value, true): 13 print("I'm exit function") 14 15 def test(self): 16 print("I'm test") 17 18 19 with TestWith() as t: 20 print(t)
运行结果:
在with调用TestWith类后会先执行TestWith类的__enter()__方法,并将这个方法的返回值赋值给as后面的t,在执行完with下面的代码块后会执行TestWith类的__exit__()方法
1 I'm enter function 2 Foo 3 I'm exit function