Python学习之__enter__和__exit__

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__来完成。

 

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *