python – 为zipfile定义的__enter__和__exit__在哪里?
作者:互联网
>加载上下文管理器的__exit __()以供以后使用.
>调用上下文管理器的__enter __()方法.
我见过其中一个用于zipfile的用法
问题>
我已经检查了位于这里的zipfile的源代码:
/usr/lib/python2.6/zipfile.py
我不知道__enter__和__exit__函数的定义在哪里?
谢谢
解决方法:
我已将此添加为另一个答案,因为它通常不是最初问题的答案.但是,它可以帮助您解决问题.
class MyZipFile(zipfile.ZipFile): # Create class based on zipfile.ZipFile
def __init__(file, mode='r'): # Initial part of our module
zipfile.ZipFile.__init__(file, mode) # Create ZipFile object
def __enter__(self): # On entering...
return(self) # Return object created in __init__ part
def __exit__(self, exc_type, exc_val, exc_tb): # On exiting...
self.close() # Use close method of zipfile.ZipFile
用法:
with MyZipFile('new.zip', 'w') as tempzip: # Use content manager of MyZipFile
tempzip.write('sbdtools.py') # Write file to our archive
如果你输入
help(MyZipFile)
你可以看到原始zipfile.ZipFile的所有方法和你自己的方法:init,enter和exit.如果需要,您可以添加另一个自己的功能.
祝好运!
标签:python,with-statement,contextmanager 来源: https://codeday.me/bug/20190713/1451302.html