Ah, thanks. I didn't think of the possibility of creating a list of methods that needed wrapping, and wrapping them uppon creation of the wrapper object. Mainly I think, becaus it seems to me as such an uggly workaround for a misdesign in Python. Also, if the wrapped object gets some extra methods/callable member variables added "after the fact", those will not get wrapped (this is however not a common thing to happen, it just annoys me that it won't work).
As to what I want to use this for, I today have a huge program in which several objects are wrapped up with comments (made up by some DOMish structre) which are displayed to the user at various times. For example, a list of users may be represented as as comment "List of users" and a python list of elements, each being a user id (represented as an integer), with a comment being the username. This means the list is usable both for user-output and for machine-handling. Hm, this wasn't prolly such a good example, but hopefully, it shows enought of the idea... Todya, the comment-value-pair is an ordinary object with two member variables, and there are two functions, getComment and getValue, which extracts a comment if its argument is such an object, or None otherwise, and the wrapped value if its argument is such an object, and the argument itself otherwize, respectively. This means my code is literally filled with calls to getValue(), which I would like to be able to remove by making the comment-value pair more transparent. Anyway, I do have some questions about your implementation: If "if inst is None: return self" to protect for infinite recursion when looking up self.__dict__? What is the reason to give func to the MethodDesc property object, why does its __get__ method have to do if func: return func.__get__(self.thing, type(self.thing)) ? What is the reason to neither wrap, nor just copy, any of __getattr__, __getattribute__, __setattr__, '__new__' or '__init__'? Especially __getattr__, __getattribute__ and __setattr__ seems to need at least some type of wrapping (but perheaps some special one)? Regards, Egil Möller -- http://mail.python.org/mailman/listinfo/python-list