Вызов super().__ init __() в классах, полученных из `object`?

Документация Python говорит, что метод __init__ каждого класса отвечает за инициализацию своего суперкласса. Но для классов нового стиля конечный базовый класс object. Выполнение dir(object) показывает, что object сам имеет метод __init__ и может быть инициализирован. Есть ли причина для этого?

Я склонен сделать это для согласованности и (немного) упрощения рефакторинга иерархии класса, но мне интересно, строго ли это или считается лучшей практикой.

Ответ 1

Вам не нужно инициализировать object; его __init__ не является оператором. Тем не менее, это хорошая практика, поскольку позже вы можете ввести промежуточный класс в иерархию.

Ответ 2

Да, сделай это. Это хорошая привычка проникать, и это не повредит.

Ответ 3

ИМХО, это не имеет никакого смысла.

  • Это позволяет вам дважды проверить наследование, чтобы понять, что он ничего не делает
  • Это то же самое, что добавить оператор pass с накладными расходами на вызов функции.
  • Цитирование zen: Although practicality beats purity.
  • Python 3 не требует, чтобы объявить object как суперкласс.

Ответ 4

Да, и есть причина, почему вы должны это делать.

Если вам когда-либо понадобится использовать множественное наследование, порядок разрешения метода Python C3 (MRO) не будет вызывать все базовые классы __init__().