What is the equivalent of the C# “using” block in IronPython? – Stack Overflow
IronPython で using てか IDisposable が利用できたんだ。
知らなかった、てゆーか with, as って何だ?
私が買った Python の本にはこんなの書いていなかった気がするんだが。
Python 2.5 以降で使えるらしい、IronPython だけというわけでは無いようで。
やっぱり知っている人は少ないのか、もう少し調べてみよう。
__ext__ 指定だけだと例外になった、__enter__ と常に対にする必要あり。
試しに何か書いてみよう、と思ったけど IronPython で思いつかなかった(ぉい!
で、PyGtk の gtk.MessageDialog は destroy() メソッドを呼ぶ必要があるので
#!/usr/bin/env python #-*- coding:utf-8 -*- import gtk class MessageBox(gtk.MessageDialog): def __init__(self, parent=None, flags=0, type=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_NONE, message_format=None): gtk.MessageDialog.__init__(self, parent, flags, type, buttons, message_format) def __enter__(self): #print 'enter' # debug return self def __exit__(self, *excinfo): #print 'exit %s' % repr(excinfo) # debug self.destroy() def messagebox(text): with MessageBox(buttons=gtk.BUTTONS_OK, message_format=text) as dlg: dlg.run() messagebox("Test !")
おぉ!確かにこれで解放処理を書かずに関数が使える。
でも try, finally のほうが解りやすいと思うんですけど…
組込みなら使うけど自分で書くかは少し微妙。