[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