super() and __get__
Michael Hudson
mwh at python.net
Wed Nov 27 11:04:14 EST 2002
More information about the Python-list mailing list
Wed Nov 27 11:04:14 EST 2002
- Previous message (by thread): Serial.py woes
- Next message (by thread): super() and __get__
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Mike Dean <klaatu at evertek.net> writes: > These are probably two separate questions, but... > > I was out on Guido's page on Unifying Types and Classes, trying to grok > super(), metaclasses, and th meaning of life. I think I get this > metaclass thing, but let me see if I get this right on super() - all > super() does, is create an object that responds to attribute access by > passing that access on to the first object (class, type, whatever) in > the MRO of the object with which super() was called, starting with the > type super() was called with (i.e., if class C has 10 base classes & > types, once all flattened out into the MRO, and class B is the 4th in > the MRO, then it only searches from B on). Am I correct? Probably :) All I think you have to know about super() is that you write def meth(args): ... super(<class textually enclosing here>, self).meth(args) For more info, the code is your friend. Be warned, brain-exploding dragons live in Objects/typeobject.c, but the implementation of super() probably isn't that bad. > Now, a couple more questions... > > Where did this __get__ thing used in describing super() (and another > thing or two on that page) come from? It's new in 2.2 if that's what you're asking. > I can't seem to find it in the docs anywhere. descrintro.html is the only documentation on this sort of thing, I think (there might be some stuff in some of the PEPs, but not much IIRC). > It was used in the Python Super() implementation, as well as another > time or two. > > Also, if object is the base class of type, why does object.__mro__ work > when object defines no __mro__? ? object.__mro__ is just (object,), no? Don't see the problem with that. > And finally, since __mro__ appears to be an attribute merely inherited > from type by all classes, if I have a fancy, can I override __mro__ to > suit some bizarre purpose? Um, I think the answer to that is "no". > Or is it ignored, simply a mechanism to access __mro__? It's a wrapper around the C level field tp_mro in the type struct. > Likewise, why does type also have an mro method, when there's > __mro__? You can make a class' metaclass have a .mro() method which will be called during class creation -- this is in descrintro.html isn't it? Or is it Lib/test/test_descr.py? Lots of stuff in that last that you might want to read, anyway. Cheers, M. -- Premature optimization is the root of all evil. -- Donald E. Knuth, Structured Programming with goto Statements
- Previous message (by thread): Serial.py woes
- Next message (by thread): super() and __get__
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list