super(ClassType, self).__init__()
является не избыточным в кооперативной схеме множественного наследования - ClassType
не обязательно является типом self
, но классом, из которого вы хотите сделать совместный вызов __init__
.
В иерархии классов C inherits B inherits A
, в C.__init__
вы хотите вызвать суперкласс 'init с точки зрения C's
, и вы вызываете B.__init__
; затем в B.__init__
вы должны передать тип класса B
в super - поскольку вы хотите разрешить вызов суперклассов B (точнее, следующего в mro после B класса C).
class A (object):
def __init__(self):
pass
class B (A):
def __init__(self):
super(B, self).__init__()
class C (B):
def __init__(self):
super(C, self).__init__()
если вы сейчас создадите экземпляр c = C()
, вы увидите, что тип класса не является избыточным - super(self).__init__()
внутри B.__init__
на самом деле не будет работать! То, что вы делаете, это то, что вы вручную указываете, к какому классу относится метод, вызывающий super (это решается в super в Python 3 скрытой переменной, указывающей на класс метода).
Две ссылки с примерами супер и множественного наследования: