Ответ 1
Короткий ответ заключается в том, что объект.__ init __() не делает ничего, кроме проверки того, что аргументы не переданы. См. источник для получения более подробной информации,
При вызове экземпляра службы вызов super() будет делегировать объект.__ init __(), и ничего не произойдет.
Однако при вызове экземпляра подкласса Service все становится интереснее. Вызов super() может потенциально делегировать какой-либо класс, отличный от объекта, класс, являющийся родителем экземпляра, но не являющийся родителем службы. Подробнее о том, как это работает и почему это полезно, см. Запись в блоге Python Super рассмотренный супер!
Следующий пример (несколько надуманный) показывает, как подкласс службы может вызвать супервызов в службе, который будет перенаправлен в другой класс Color:
class Service(object):
def __init__(self, host, binary, topic, manager, report_interval=None,
periodic_interval=None, *args, **kwargs):
print 'Initializing Service'
super(Service, self).__init__(*args, **kwargs)
class Color(object):
def __init__(self, color='red', **kwargs):
print 'Initializing Color'
self.color = color
super(Color, self).__init__(**kwargs)
class ColoredService(Service, Color):
def __init__(self, *args, **kwds):
print 'Initializing Colored Service'
super(ColoredService, self).__init__(*args, **kwds)
c = ColoredService('host', 'bin', 'top', 'mgr', 'ivl', color='blue')
В этом примере инициализация происходит в следующем порядке:
- Инициализация цветной службы
- Инициализация службы
- Инициализация цвета
- Инициализировать объект - ничего не делать, кроме проверки аргументов