[Python-Dev] Classes and Metaclasses in Smalltalk

Guido van Rossum guido@digicool.com
Wed, 02 May 2001 10:05:30 -0500


> guido wrote:
> 
> > > class MyClass (BaseClass):
> > >     def foo (self, arg1, arg2):
> > >          super.foo(arg1, arg2)
> >
> > I'm sure that's everybody's favorite way to spell it!
> 
> not mine.  my brain contains far too much Python 1.5.2 code
> for it to accept that some variables are dynamically scoped,
> while others are lexically scoped.
> 
> why not spell it out:
> 
>     self.__super__.foo(arg1, arg2)
> 
> or
> 
>     self.super.foo(arg1, arg2)
> 
> or
> 
>     super(self).foo(arg1, arg2)
> 
> > Or, to relieve the burden from the symbol table, we could make super
> > a keyword, at the cost of breaking existing code.
> 
> hey, how about introducing $ as a keyword prefix for newly introduced
> keywords?
> 
>     $super.foo(arg1, arg2)
> 
> (this can of course be mapped to either of my previous suggestions;
> "$foo" either means "self.foo" or "foo(self)"...)
> 
> and to save a little typing, only use it for keywords that start with
> an "s" (should leave us plenty of expansion room):
> 
>     $uper.foo(arg1, arg2)
> 
> otoh, if "super" is common enough to motivate introducing magic objects
> into python, maybe "$" should mean "super."?
> 
>     $foo(arg1, arg2)
> 
> and while we're at it, let's introduce "@" for "self.".
> 
> gotta run -- time for my monthly reboot /F

LOL!  But you forgot the spelling of

    self.__super.foo(arg1, arg2)

which would pass in the class name that's the other necessary input to
a proper implementation of super. :-)

--Guido van Rossum (home page: http://www.python.org/~guido/)