FishHook
А вот метод __new__ создает объект (он его вообще возвращает) поэтому, как мне кажется, это есть конструктор.
Не могу согласиться с этим утверждением.
Проводя параллель между языком Python и такими популярными языками как Java, C#, C++, возникает закономерный вопрос. В этих языках конструкторы есть, но значение они не возвращают.
Было бы неплохо для начала дать определение созданию объекта. Поскольку если к примеру говорить о С++, то объект класса создается при помощи оператора new, который выделяет память для объекта и вызывает конструктор класса (т.е. выполняет инициализацию объекта). При чем память может быть выделена любым другим механизмом, а объект может быть инициализирован оператором placement new, который по факту вызывает конструктор класса над уже аллоцированным участком памяти.
Соответственно как мне кажется наиболее подходящим под задачи конструктора является __init__, хотя никто не запрещает инициализировать объект в методе __new__.