我正在阅读这个问题而且在我看来我也需要它,但在Python中.所以我想知道是否有一种方法可以用with
Python中的语句来做到这一点.
基本上我想要的是Python中的某种IDisposable(C#)类比.我知道,肯定会有点不同,我认为如下:
class ForUseInWith(IDisposableLike):
#something here
pass
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
with ForUseInWith() as disposable:
#something here
pass
Run Code Online (Sandbox Code Playgroud)
目前我正在研究如何研究python参考和PEP 343,如果我设法做了一个很好的解决方案和一个聪明的例子,我将在这里发布答案.但顺便说一句,也许你可以帮助我.
这很容易,你只需要在课堂上有一个__enter__
和一个__exit__
方法.
例:
class ForUseInWith(object):
def test(self):
print 'works!'
def __enter__(self):
return self
def __exit__(self, *args, **kwargs):
pass
Run Code Online (Sandbox Code Playgroud)
使用它:
>>> with ForUseInWith() as disposable:
disposable.test()
works!
Run Code Online (Sandbox Code Playgroud)
扩展它:
当然,您可以使用__init__
接收参数的方法(例如open()
),还可以包括处理方法中的错误/异常的__exit__
方法.这种结构最适用于需要能够处理的简单类,或者是一次性过程,不需要粘贴或处理复杂