[Python-ideas] Explicit self argument, implicit super argument

Neil Toronto ntoronto at cs.byu.edu
Mon Nov 19 23:03:56 CET 2007


Arnaud Delobelle wrote:
> Self being explicit makes it less selfish :)
> To illustrate, I like that you can do:
> 
> class Foo(str):
>     def mybar(self):
>         class Bar(str):
>             def madeby(me):
>                 return "I am %s and I was made by %s" % (me, self)
>         return Bar
> 
>  >>> foo=Foo("foo")
>  >>> #bar=foo.mybar()  # typo
>  >>> Bar=foo.mybar()
>  >>> bar=Bar("bar")
>  >>> print bar.madeby()
> I am bar and I was made by foo

Ah, I see. If self were passed implicitly, you would need to make a 
Bar.__init__ that received and stored the outer self. I think I'd call 
this a third uncommon case. Outside functional idioms, common is usually 
flat.

> This depends on 'self' being explicit and is not related to super.
> I didn't know about implicit super, it's probably great but my initial
> reaction is that I don't like it :(
> 
> Why not:
> 
> class Foo:
>     @with_super
>     def bar(super, self, x, y):
>         super.bar(x, y)
>         ...

Probably because it's way too common to require a decorator for it. 
Users would have to make "always use @with_super" into a coding habit. 
(Sort of like "self" actually.) It'd also be yet another thing to keep 
in mind while reading code: did this method use @with_super or not?

Neil



More information about the Python-ideas mailing list