标签:python with-statement contextmanager
>加载上下文管理器的__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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。