__init__ vs __new__ em Python: Como Funcionam e Quando Usá-los

O init inicializa um objeto já criado, enquanto o new é responsável pela criação da instância antes da inicialização.

Qual a diferença entre init e new em Python?

Na Programação Orientada a Objetos em Python, os métodos __init__ e __new__ desempenham papéis diferentes na criação e inicialização de objetos.

O que é o __new__?

O método __new__ é chamado antes do __init__ e é responsável por criar a instância da classe. É um método de classe que recebe a própria classe como primeiro parâmetro.

class Exemplo:  
    def __new__(cls):  
        print("Criando a instância...")  
        return super().__new__(cls)  

    def __init__(self):  
        print("Inicializando a instância...")  

obj = Exemplo()  

Explicação do código

  1. __new__ é chamado antes da criação do objeto e retorna a instância. 2. __init__ é chamado logo após, inicializando os atributos do objeto. 3. A saída mostrará a mensagem do __new__ antes da do __init__.

O que é o __init__?

O método __init__ é responsável por inicializar os atributos do objeto recém-criado. Ele não cria a instância, apenas define suas propriedades.

Quando usar __new__?

O __new__ é útil quando precisamos personalizar a criação de objetos, como em classes singleton ou ao herdar de tipos imutáveis (ex: int, str).

Entender a diferença entre __init__ e __new__ permite um controle mais avançado sobre a criação de objetos em Python. Embora o __init__ seja amplamente utilizado, conhecer o papel do __new__ pode ser crucial em cenários mais complexos.

Algumas aplicações:

  • Criação de classes Singleton.
  • Manipulação de herança em tipos imutáveis.
  • Personalização do processo de criação de instâncias.

Dicas para quem está começando

  • Use __init__ para inicializar atributos da instância.
  • O __new__ deve retornar uma instância da classe.
  • Se precisar modificar a criação do objeto, sobrescreva __new__.
  • Evite modificar __new__ sem necessidade, pois __init__ cobre a maioria dos casos.

Contribuições de Pedro Vasconcellos

Compartilhe este tutorial: Qual a diferença entre __init__ e __new__

Compartilhe este tutorial

Continue aprendendo:

O que é self em Python

O parâmetro self em Python é utilizado dentro de métodos de classe para referenciar a própria instância do objeto.

Tutorial anterior

Como fazer herança em Python

A herança em Python permite que uma classe filha herde atributos e métodos de uma classe pai, facilitando a reutilização de código.

Próximo tutorial