Bruno Desthuilliers <bruno.42.desthuilli...@websiteburo.invalid> writes: > 7stud a écrit : > (snip) >> class Wrapper(object): >> def __init__(self, obj, func): >> self.obj = obj >> self.func = func >> >> def __call__(self, *args): >> return self.func(*args) >> >> def __getattr__(self, name): >> return object.__getattribute__(self.obj, name) > > This should be > > return getattr(self.obj, name) > > directly calling object.__getattribute__ might skip redefinition of > __getattribute__ in self.obj.__class__ or it's mro.
Works nicely, thanks. I came up with the following shorter version which modifies the object in-place: class Modifier(obj.__class__): def __call__(self): return fn() obj.__class__ = Modifier To me this seems a bit more elegant (less code, less underscores). Or are there some cases where the above would fail? Best, -Nikolaus -- »Time flies like an arrow, fruit flies like a Banana.« PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6 02CF A9AD B7F8 AE4E 425C -- http://mail.python.org/mailman/listinfo/python-list