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__

(<class '__main__.B'>, <class '__main__.A'>, <type 'list'>, <type 'object'>)

B()

B.__init__ A.__init__ []

class C(list, A):

... def __init__(self): ... print "C.__init__" ... super(C, self).__init__() ...

C.__mro__

(<class '__main__.C'>, <type 'list'>, <class '__main__.A'>, <type 'object'>)

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

Reply via email to