# -*- python -*- import sys
def switchFor (target): sw = '__switch_table__' # please pretend the frame hack is not here, # it happens to work for classes and messing with # frame stack in a try/except is probably okay try: raise Exception() except: defs = sys.exc_info()[2].tb_frame.f_back.f_locals if sw not in defs: defs[sw] = {} table = defs[sw] def _(meth): table[target] = meth return meth return _ class SwitchMixin (object): def __init__ (self): self.__switch_table__ = self.__switch_table__.copy() def switchOn (self, target, *args, **kw): return self.__switch_table__[target](self, *args, **kw) if __name__ == '__main__': class SwitchTest(SwitchMixin): @switchFor("foo") def switch (self, arg): print arg * 3 @switchFor("bar") def switch (self, arg): print "__%s__" % (arg,) @switchFor("baz") def switch (self, arg): print arg + ''.join(reversed(arg)) st = SwitchTest() st.switchOn("foo", "oof") st.switchOn("bar", "rab") st.switchOn("baz", "zab") -- http://mail.python.org/mailman/listinfo/python-list