编程语言
首页 > 编程语言> > python – 为zipfile定义的__enter__和__exit__在哪里?

python – 为zipfile定义的__enter__和__exit__在哪里?

作者:互联网

基于with statement

>加载上下文管理器的__exit __()以供以后使用.
>调用上下文管理器的__enter __()方法.

我见过其中一个用于zipfile的用法

问题&GT
我已经检查了位于这里的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