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
__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).
Quando usar __new__ em vez de __init__?
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.
Pedro Vasconcellos
Especialista em automação de processos e desenvolvimento de scripts com Python.
Mais sobre o autor