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 のほうが解りやすいと思うんですけど…
組込みなら使うけど自分で書くかは少し微妙。
