[Python-3000] auto-super()

Guido van Rossum guido at python.org
Wed Apr 19 01:50:51 CEST 2006


On 4/19/06, Delaney, Timothy (Tim) <tdelaney at avaya.com> wrote:
> Perhaps when a code object is constructed it could include a reference
> to the class where it was constructed (if any).

No, code objects shouldn't contain references to run-time artifacts
(other than other code objects). Code objects must be marshallable.

It's the function objects created from code objects that reference
other run-time state (like globals, default values, and closure
cells).

> Then the class to use in
> `super` would be obtained directly. I originally wanted to use im_class
> rather than walk the MRO, but im_class didn't give the correct result,
> and in any case I'd still need sys._getframe().

Perhaps the best way to implement super might be to create it as a
"cell". Functions already have a mechanism to access cells that are
passed in by the environment when the function objects is created.
Perhaps 'super' could use a cell with a magic name to access the
class.

> This approach would of course not work properly if the same method was
> then added to another class (a flaw shared by my recipe IIRC). One way
> to deal with that would be to check that the class was actually in the
> MRO of the current instance, and throw a TypeError if it's not.

Methods that are shared between classes shouldn't reference super in
either form.

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


More information about the Python-3000 mailing list