Stef Mientki a écrit :
<snip>
Alternative (if you *really* want to save the explicit test) is to
attach the behaviour modification to the *relevant* class:

class NonEvent(Event):
   def do_nothing(self):
      pass
   skip = jump = hop = waltz = saunter = do_nothing
   def __len__(self):
      return 0
NON_EVENT = NonEvent()
del NonEvent

# later:

def amethod(self, event=NON_EVENT):
   if event: # still works thanks to __len__ above
      event.skip()
   # now can avoid test, if desired
   event.skip()

thanks guys, the Null, Dummy, Skipper, Nonevent class works great

The NullObject pattern is indeed a proven solution. Another one is to use a decorator:

def skip_event(event_handler):
   def wrapper(self, event=None):
      if event is not None:
          event.skip()
      return event_handler(self, event)
   wrapper.__name__ = "skip_event_%s" % event_handler.__name__
   wrapper.__doc__  = event_handler.__doc__
   return wrapper

@skip_event
def on_menu_file_open(self, event=None):
   do_something_usefull_here

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to