Terry Reedy wrote:
To avoid the redundancy of 'a' and '_a', etc, how about (untested):
def dispvia(f):
dispatch[f.__name__.split('_')[1]] = f
return f
A similar idea:
Py> class DispatchTable(dict):
... def __init__(self, prefix=""):
... self._prefix = prefix
... self._ignored = len(prefix)
... def registerAs(self, name):
... def _ (f):
... self[name] = f
... return f
... return _
... def register(self, f):
... name = f.__name__
... _ignored = self._ignored
... if name[:_ignored] == self._prefix:
... name = name[_ignored:]
... self[name] = f
... return f
...
Py> dispatcher = DispatchTable("handle_")
Py> @dispatcher.register
... def handle_a(): pass
...
Py> @dispatcher.register
... def b(): pass
...
Py> @dispatcher.registerAs("c")
... def f(): pass
...
Py> for t in sorted(dispatcher.items()): print '%5s: %r'%t
...
a: <function handle_a at 0x009D8930>
b: <function b at 0x009D85B0>
c: <function f at 0x009D8830>
--
Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia
---------------------------------------------------------------
http://boredomandlaziness.skystorm.net
--
http://mail.python.org/mailman/listinfo/python-list