On Thu, 2007-10-25 at 23:13 +0200, Bruno Desthuilliers wrote: <snip excellent breakdown>
> > The logical next question then is how does one best add a new method > > to this class so that future references to x.set_x() and X.set_x will > > properly resolve? It seems the answer would be to somehow add to > > X.__dict__ a new value, with key 'set_x', value the function set_x. > > Yes. Which is very simply done by just binding set_x to X.set_x. Just > like I did above. Dynamically adding methods to classes is pretty > straightforward, the tricky point is to dynamically add methods to > instances, since the descriptor protocol is only triggered for class > attributes. But you obviously found how to do it using func.__get__(obj, > type(obj)) !-) > This is the greasy, getting your hands dirty way. I vastly prefer (and reccomend) using the new module: >>> import new >>> class X(object): ... pass ... >>> def bar(self): ... print self ... >>> x = X() >>> x.bar = new.instancemethod(bar, x, X) >>> x.bar() <__main__.X object at 0x87dca0c> >>> > >>From there on the . operator I assume would perform the binding to X > > or x as needed on-the-fly. > > Yes. > > NB: please some guru around correct me if I said something wrong (Alex ? > Tim ? Fredrick ? If you hear me ?) -- http://mail.python.org/mailman/listinfo/python-list