Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
MRO About super()
#1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
1
2
>>> 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 3 1,893 Jun-11-2024, 02:15 AM
Last Post: kanetracy
  super() in class akbarza 1 2,657 Dec-19-2023, 12:55 PM
Last Post: menator01
  superclass and super() grkiran2011 1 2,364 Jun-20-2020, 04:37 AM
Last Post: deanhystad
  Super with Sublime Text - TypeError: super() takes at least 1 argument (0 given) Shafla 6 9,209 May-04-2019, 08:30 PM
Last Post: Shafla
  Is any super keyword like java rajeev1729 2 4,140 Sep-14-2017, 07:47 PM
Last Post: snippsat
  Multiple Inheritance using super() Sagar 2 8,051 Sep-08-2017, 08:58 AM
Last Post: Sagar

Forum Jump:

User Panel Messages

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