[Python-3000] Fixing super anyone?

Michele Cella michele.cella at gmail.com
Mon Apr 23 23:08:03 CEST 2007


Thomas Wouters wrote:
> 
> But how would it *work*? I assume you want 'super' to take a single 
> expression, and be an expression itself. How does it know which instance 
> you want to 'super'? Does it specialcase the variable named 'self'? 
> Threat 'everything up to the first dot' as 'the instance'? Specialcase 
> the first argument to the method? (That's what ' super.foo()' would do.) 
> How would you do things like:
> 
>   # call the supermethod 'register' with the nonsuper 'callback':
>   super.register(self.callback)
>   # call the nonsuper 'register' with the supermethod 'callback'
>   self.register(super.callback)
>   # call the 'frominstance' method of the 'innerclass' attribute on the 
> superclass
>   super.innerclass.frominstance(self)
> 

Hi Thomas,

Yes, you raise good points.

My solution is nice (IMHO) for the simplest use case (and, probably, the 
most frequent) but it's behavior is really unclear for these complex use 
cases. Thanks for pointing that out.

As far as I'm concerned, I can only confirm that having a super keyword 
with methods attached (like Aahz said) when no other keyword has (and 
there are many) doesn't feel right (to me) and can be confusing at 
first. That's unfortunate as I rarely found python confusing up to now 
(contrary to other languages).

The only other option that comes to my mind is using a special attribute 
in the instance itself (like __class__, __dict__, ...):

	self.__super__.mymethod(arg)

I'm sure this (again) introduces other problems I simply overlooked, in 
this case, forgive me please. ;-)

Thanks again for your attention.

Ciao
Michele



More information about the Python-3000 mailing list