withとか使ってみようとした
機能の存在は知っているけれど、使ったことが無かったので朝の空いた時間に。
# -*- coding: utf-8 -*- ## schemeのparamaterのようなことしようとしたらp.x = yがは文だった。 ## print p.x = yとか無理だった。 # need self._value class Paramaterized(object): @property def value(self): return self._value @value.getter def value(self): return self._value @value.setter def value(self, n): r = self._value self._value = n return r ## need self.is_finished class Notifiable(object): def notify(self): print "is-finished?: %s" % self.is_finished class Paramater(Paramaterized, Notifiable, object): def __init__(self, n): self._value = n def __enter__(self): self.is_finished = False self.notify() return self def __exit__(self, exc_type, exc_value, traceback): self.is_finished = True self.notify() fmt = "type:%s, value:%s, \ntraceback:%s" print(fmt % (exc_type, exc_value, traceback)) return True # 握りつぶす # return False # 再送したければfalse ### with Paramater(10) as p: print p.value p.value = 100 #print (p.value = 100) # error print p.value with Paramater(10) as p: raise Exception("Hey!!") # is-finished?: False # 10 # 100 # is-finished?: True # type:None, value:None, # traceback:None # is-finished?: False # is-finished?: True # type:<type 'exceptions.Exception'>, value:Hey!!, # traceback:<traceback object at 0x7f8a6af19908>
contextlibとかあとで調べる。