[Python-3000] [Fwd: features i'd like [Python 3000] ... #3: fix super()]
Josiah Carlson
jcarlson at uci.edu
Thu Dec 7 01:27:20 CET 2006
"Thomas Wouters" <thomas at python.org> wrote:
> On 12/6/06, Jan Grant <jan.grant at bristol.ac.uk> wrote:
> > On Mon, 4 Dec 2006, Ben Wing wrote:
> >
> > > as a result, i imagine there's a strong urge to just hardcode the name
> > > of the parent
> > ^^^^^^^^^^
> >
> > > -- super.meth(args) calls the superclass method `meth'
> > ^^^^^^^^^^^^^^
> >
> > Python supports multiple inheritance, unlike Java; the design mantra is
> > "explicit is better than implicit" and "ambiguity should be an error".
> > Two! The two design mantras are...
>
>
> You forget that that's actually what super() is for. It does the right thing
> in the case of MI (and every other case, in fact :-)
Except for this one:
>>> class foo(object):
... pass
...
>>> class bar(foo):
... def method(self):
... super(bar, self).method()
...
>>> bar().method()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in method
AttributeError: 'super' object has no attribute 'method'
>>>
Because of this kind of thing, I do my best to never produce code that
has a diamond inheritance structure (except for object), and always use
things like foo.method(self).
- Josiah
More information about the Python-3000
mailing list