On Sat, 15 Dec 2007 01:07:17 -0800, tuom.larsen wrote: ... > later in the library I would like to expose the > simplified interface as well: > > _machine = StateMachine() > function0 = _machine.function0 > function1 = _machine.function1 > function2 = _machine.function2 > ... > > Is there a way to do so in a programmatic way? Like: > > _machine = StateMachine() > for function in {every function in _machine}: > function = _machine.function > > Not that it's difficult to copy-paste some lines, I'm just curious and > maybe it would be a tiny bit easier to maintain the library.
You can say: # Untested! _machine = StateMachine() from new import instancemethod for name in _machine.__class__.__dict__: if name.startswith('_'): continue obj = getattr(_machine, name) if type(obj) == instancemethod: globals()[name] = obj but that's likely to export a bunch of functions you don't actually want. A better solution might be to create a class attribute containing the names you DO want to export, and reject everything else: class StateMachine(object): _exportable = ['spam', 'eggs', 'parrot'] # function definitions go here for name in _machine.__class__.__dict__: if name in _machine._exportable: globals()[name] = getattr(_machine, name) -- Steven -- http://mail.python.org/mailman/listinfo/python-list