__new__
Мы часто называем __init__ конструктором, но это только потому, что позаимствовали терминологию из других языков. На самом деле, конструирует экземпляр специальный метод __new__.
Это метод класса (однако он обрабатывается особым образом, поэтому декоратор @classmethod не используется), и возвращать он должен экземпляр. Этот экземпляр затем передается в качестве первого аргумента self методу __init__.
Поскольку __init__ при вызове уже получает экземпляр, что-то возвращать ему запрещено, по существу, метод __init__ является инициализатором. Настоящий конструктор - это метод __new__, но мы о нем редко вспоминаем, потому что реализации, унаследованной от класса object, обычно достаточно.Далее...