[Python-Dev] Let's get rid of unbound methods (original) (raw)

Josiah Carlson jcarlson at uci.edu
Wed Jan 5 02🔞30 CET 2005


Tim Peters <tim.peters at gmail.com> wrote:

Guido wrote: > Let's get rid of unbound methods. When class C defines a method [snip] Really? Unbound methods are used most often (IME) to call a base-class method from a subclass, like mybase.themethod(self, ...). It's especially easy to forget to write self, there, and the exception msg then is quite focused because of that extra bit of type checking. Otherwise I expect we'd see a more-mysterious AttributeError or TypeError when the base method got around to trying to do something with the bogus self passed to it.

Agreed. While it seems that super() is the 'modern paradigm' for this, I have been using base.method(self, ...) for years now, and have been quite happy with it. After attempting to convert my code to use the super() paradigm, and having difficulty, I discovered James Knight's "Python's Super Considered Harmful" (available at http://www.ai.mit.edu/people/jknight/super-harmful/ ), wherein I discovered how super really worked (I should have read the documention in the first place), and reverted my changes to the base.method version.

I could live with that, though.

I could live with it too, but I would probably use an equivalent of the following (with actual type checking):

def mysuper(typ, obj): lm = list(o.class.mro) indx = lm.index(typ) if indx == 0: return obj return super(lm[indx-1], obj)

All in all, I'm -0. I don't desire to replace all of my base.method with mysuper(base, obj).method, but if I must sacrifice convenience for the sake of making Python 2.5's implementation simpler, I guess I'll deal with it. My familiarity with grep's regular expressions leaves something to be desired, so I don't know how often base.method(self,...) is or is not used in the standard library.



More information about the Python-Dev mailing list