[Python-Dev] Let's get rid of unbound methods

Josiah Carlson jcarlson at uci.edu
Wed Jan 5 02:18: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 my_base.the_method(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.
 - Josiah


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /