Giovanni Bajo wrote:
Hello,
I noticed that bultin types like list, set, dict, tuple don't seem to adhere to
the convention of using super() in constructor to correctly allow
diamond-shaped inheritance (through MRO). For instance:
class A(object):
... def __init__(self):
... print "A.__init__"
... super(A, self).__init__()
...
class B(A, list):
... def __init__(self):
... print "B.__init__"
... super(B, self).__init__()
...
B.__mro__
(, , , )
B()
B.__init__
A.__init__
[]
class C(list, A):
... def __init__(self):
... print "C.__init__"
... super(C, self).__init__()
...
C.__mro__
(, , , )
C()
C.__init__
[]
It seems weird to me that I have to swap the order of bases to get the expected
behaviour. Is there a reason for this, or is it simply a bug that should be
fixed?
The documentation explicitly states that only one of the built-in types
can be used as a base class: they aren't desinged to be mixed with each
other.
regards
Steve
--
Meet the Python developers and your c.l.py favorites March 23-25
Come to PyCon DC 2005 http://www.pycon.org/
Steve Holden http://www.holdenweb.com/
--
http://mail.python.org/mailman/listinfo/python-list