Python学习之__enter__和__exit__
很多人都知道python有2个特殊的方法:
__init__
__del__
第一个是类的构造函数
第二个是类的析构函数
除了这2个之外,还有2个
__enter__
__exit__
我们先写个类,将上面的四个方法当完成,之后构造一个类对象,看看有什么效果
7 class testEnterExit(object):
8 def __init__( self ):
9 print 'init'
10 def __del__( self ):
11 print 'delete'
12 def __enter__( self ):
13 print 'enter'
14 def __exit__( self, type, value, tb ):
15 print 'exit'
16
17 if __name__ == "__main__":
23 tee = testEnterExit()
结果是:
init
delete
也就是只调用了构造和析构,我们把程序稍微改造:
7 class testEnterExit(object):
8 def __init__( self ):
9 print 'init'
10 def __del__( self ):
11 print 'delete'
12 def __enter__( self ):
13 print 'enter'
14 def __exit__( self, type, value, tb ):
15 print 'exit'
16
17 if __name__ == "__main__":
22 print '———-test enter ane exit————–'
23 tee = testEnterExit()
24 with tee:
25 print 'do something here'
改动就是多加了蓝色的2行,
这时候结果就是:
init
enter
exit
delete
原来是在with语句的时候,发现__enter__和__exit__被执行了。
其实 __enter__和__exit__就为with特意设计的,当进入with的时候,调用__enter__,你可以做一个准备,比如链接数据库,离开with语句块,__exit__被调用,你可以做一些扫尾工作,比如关掉数据库的链接。
不过刚才举的例子不是很好,因为这样的工作完全可以在 __init__和 __del__来完成。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.