有没有办法使用Python"with"语句,如"使用"C#

Alv*_*tes 3 python

我正在阅读这个问题而且在我看来我也需要它,但在Python中.所以我想知道是否有一种方法可以用withPython中的语句来做到这一点.

基本上我想要的是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,如果我设法做了一个很好的解决方案和一个聪明的例子,我将在这里发布答案.但顺便说一句,也许你可以帮助我.

Inb*_*ose 6

这很容易,你只需要在课堂上有一个__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__方法.这种结构最适用于需要能够处理的简单类,或者是一次性过程,不需要粘贴或处理复杂