Skip Montanaro wrote: > On Thu, Apr 20, 2017 at 3:19 PM, Peter Otten <__pete...@web.de> wrote: > >> If being helpful really is the only purpose of the metaclass you can >> implement a SomeClass.__dir__() method instead: >> >> def __dir__(self): >> names = dir(self._instance) >> # <snip whatever post-processing you want> >> return names >> > > Thanks. That would probably get me halfway home in Python 3, but appears > to have no effect in Python 2. It wouldn't solve the missing attributes in > help()/pydoc either.
OK, looks like I messed up. Another round, this time with a metaclass. As you have found partial() does not work as a method because it's not a descriptor (i. e. no __get__() method). Instead you can try a closure: def make_method(a): underlying = getattr(SomeOtherClass, a) @functools.wraps(underlying) def _meth(self, *args, **kw): return underlying(self._instance, *args, **kw) return _meth class SomeMeta(type): def __new__(cls, name, parents, dct): for a in dir(SomeOtherClass): if a[0] == "_": continue dct[a] = make_method(a) return super(SomeMeta, cls).__new__(cls, name, parents, dct) -- https://mail.python.org/mailman/listinfo/python-list