Thiago,
Na realidade o método __init__
é o inicializador, este é um método especial em Python (chamado __init__
) que é chamado automaticamente para configurar um objeto recém-criado no seu estado inicial (padrão de fábrica).
O metodo construtor seria o new, veja o exemplo:
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> class aluno:
... pass
...
>>> thiago = aluno()
>>> dir(thiago)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>>
>>> dir(thiago.__new__)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
>>> (thiago.__new__).__doc__
'Create and return a new object. See help(type) for accurate signature.'
>>>
OBS: No final esta escrito literalmente: "Cria e retorna um novo objeto. Veja ajuda (type) para assinatura precisa.
Use o __new__
quando você precisar controlar a criação de uma nova instância da classe. Use o __init__
quando você precisar controlar a inicialização de uma nova instancia.
O __new__
é o primeiro passo da criação de uma instância. Ele é chamado primeiro, e é responsável por retornar uma nova instancia da sua classe. Em contraste, o __init__
não retorna nada, ele é apenas responsável pela inicialização da instancia após a classe ser criada.
Em geral, você não deveria sobrepor o __new__
ao menos que seja uma subclasse, um tipo imutável como str, int, unicode ou tuple.