Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
MRO About super()
#1
class A():
    def __init__(self):
        print('enter A')
        print('leave A')


class B(A):
    def __init__(self):
        print('enter B')
        super().__init__()
        print('leave B')


class C(A):
    def __init__(self):
        print('enter C')
        super().__init__()
        print('leave C')


class D(B, C):
    def __init__(self):
        print('enter D')
        super().__init__()
        print('leave D')
d=D()
why the result is:
enter D
enter B
enter C
enter A
leave A
leave C
leave B
leave D
NOT:
enter D
enter B
enter A
leave A
leave B
enter C
enter A
leave A
leave C
leave D
Thank you!
Reply
#2
Python uses C3 superclass linearization since version 2.3. This algorithm is described in many places. You can access the method resolution order directly with the mro() method
>>> D.mro()
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Problems with super() Hoespilaar 2 218 Apr-10-2024, 10:10 AM
Last Post: Hoespilaar
  super() in class akbarza 1 447 Dec-19-2023, 12:55 PM
Last Post: menator01
  superclass and super() grkiran2011 1 1,725 Jun-20-2020, 04:37 AM
Last Post: deanhystad
  Super with Sublime Text - TypeError: super() takes at least 1 argument (0 given) Shafla 6 7,395 May-04-2019, 08:30 PM
Last Post: Shafla

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020