Python's super() considered super!

Steven D'Aprano steve+comp.lang.python at pearwood.info
Fri May 27 12:06:05 EDT 2011


On Fri, 27 May 2011 08:31:40 -0700, sturlamolden wrote:

> On 27 Mai, 17:05, Duncan Booth <duncan.bo... at invalid.invalid> wrote:
> 
>> Oops. There's a reason why Python 2 requires you to be explicit about
>> the class; you simply cannot work it out automatically at run time.
>> Python 3 fixes this by working it out at compile time, but for Python 2
>> there is no way around it.
> 
> Then it should be a keyword, not a function.

Why? The fault is not that super is a function, or that you monkey-
patched it, or that you used a private function to do that monkey-
patching. The fault was that you made a common, but silly, mistake when 
reasoning about type(self) inside a class. 

I made the same mistake: assume that type(self) will always be the same 
class as that the method is defined in. But of course it won't be. With 
the luxury of hindsight, it is a silly mistake to make, but I promise you 
that you're not the first, and won't be the last, to make it.



-- 
Steven



More information about the Python-list mailing list