Есть еще различие, связанное с mro.
class A(object):
def f(self):
return ‘A’
class B(A):
def f(self):
return super(B, self).f()+'B'
class C(A):
def f(self):
return super(C, self).f()+'C'
class D(B,C):
def f(self):
return super(D, self).f()+'D'
assert D().f() == ‘ACBD’
Заметтье, каждая функция вызывается всего лишь раз. Без всяких дополнительных усилий с моей стороны.