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.
Contribuições de Pedro Vasconcellos