[Python-Dev] Classes and Metaclasses in Smalltalk (original) (raw)

Jeremy Hylton jeremy@digicool.com
Wed, 2 May 2001 09:38:42 -0400 (EDT)


"GvR" == Guido van Rossum <guido@digicool.com> writes:

Since I don't know much about Python's guts, I can't say how implementable this is, but I like the spelling. The semantics would be something like this (with adjustments to the reality of Python's guts):

  • 'super' is a magic object that only makes sense inside a 'def' inside a 'class' (at least for now; perhaps it could be generalized to work at class scope as well as method scope, but let's keep it simple)

GvR> Yes, that's about the only way it can be made to work. The GvR> compiler will have to (1) detect that 'super' is a free GvR> variable, and (2) make it a local and initialize it with the GvR> proper magic. Or, to relieve the burden from the symbol table, GvR> we could make super a keyword, at the cost of breaking existing GvR> code.

GvR> I don't think super is needed outside methods.

It seems helpful to clarify here, since this came up in conversation at PythonLabs just the other day with the yield statement.

If we try to avoid keywords, we have to take the "well, I don't see anyone assigning to this name" route. If the compiler does not detect any assignment to a nearly reserved word, like super, it would give the use of that word special meaning.

There are a bunch of little problems. A module could (not necessarily should) be designed to have a global name poked into its namespace; this would break, because the name would already have transmogrified from a regular variable into a special one. The use of exec or import star would make it impossible for the word to take on its special meaning.

So keywords really are a lot clearer, but they have the potential to be incompatible.

Jeremy