[Tutor] Calling super classs __init__?
andreas at kostyrka.org
Fri Mar 21 10:25:36 CET 2008
It does not return them at once.
It returns them piece by piece:
andreas at andi-lap:/tmp> cat mro.py
v=lambda self: "A"
v=lambda self: "B"
v=lambda self: "C"
print super(C, c).v()
print super(B, c).v()
andreas at andi-lap:/tmp> python2.5 mro.py
(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
Am Freitag, den 21.03.2008, 23:11 -0500 schrieb tiger12506:
> Woah. Either you're leaving out essential info, or python got a lot more
> Firstly, super returns all base classes. How? Does it return a tuple of
> them, or a container object, or is this something horribly worse such as
> syntactic sugar?
> It doesn't make sense for it to return a tuple, then super().__init__ would
> call the init method of the tuple, not each class, so then syntactic sugar
> would have to be involved. I doubt that..
> A container object could use __getattr__ to magically call each of the
> __init__ methods of the contained class references.
> The most logical is the container object. But that leaves things open for
> duplicate calls to __init__
> So the container would have to keep track of the base classes it has already
> called... which might be the ordered list __mro__, but those are class
> specific, not global, so each super class would not know if an __init__ has
> been called or not... But then again, you would need duplicate calls because
> each level of super would need different initiation.
> I apologize. Would you care to explain this a little more technically?
> Specific and accurate are better than translated into layman's terms. I've
> been with python for a while now. thanks.
> >Actually, super returns all base classes, all in it's own time.
> >Basically, every class has a member __mro__, that contains a
> >consistently ordered list of classes.
> >super needs the class from where it is being called to locate the right
> >place in the __mro__ and to hand you a wrapper around self for the next
> >base class in this list.
> >This way, if all classes use super, they can cooperativly call all
> >implementations of a given method.
> >That's the theory. In practice there are a number of pitfalls which
> >makes super problematic. ;)
> Tutor maillist - Tutor at python.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 189 bytes
Desc: Dies ist ein digital signierter Nachrichtenteil
Url : http://mail.python.org/pipermail/tutor/attachments/20080321/38fe9cad/attachment.pgp
More information about the Tutor