Для каждого класса в последовательности mro вы можете проверить, существует ли метод __init__
в классе __dict__
:
class A:
def __init__(self):
pass
class B(A):
def __init__(self):
super().__init__()
class C(A):
pass
class D(B, C):
pass
if __name__ == '__main__':
for cls in D.__mro__:
if '__init__' in cls.__dict__:
print(f'{cls.__name__} has its own init method', end='\n')
else:
print(f'{cls.__name__} has no init method', end='\n')
выход:
D has no init method
B has its own init method
C has no init method
A has its own init method
object has its own init method
В этом выводе первый класс, имеющий метод __init__
(здесь B
), это тот, который вызывается super().__init__()
в D()