8.4 Construtor

Em Python, alguns nomes de métodos estão reservados para o uso da própria linguagem. Um desses métodos é o init () que vai inicializar o objeto. Seu primeiro parâmetro, assim como todo método de instância, é a própria instância. Por convenção, chamamos este argumento de self. Vejamos um exemplo:

class Conta:
python
def __init__(self, numero, titular, saldo, limite): self.numero = numero
 
self.titular = titular self.saldo = saldo self.limite = limite
 

Agora, quando uma classe é criada, todos os seus atributos serão inicializados pelo método

init () . Apesar de muitos programadores chamarem este método de construtor, ele não cria um objeto conta. Existe outro método, o new () que é chamado antes do init_() pelo interpretador do Python. O método new () é realmente o construtor e é quem realmente cria uma instância de Conta . O método init () é responsável por inicializar o objeto, tanto é que já recebe a própria instância (self) criada pelo construtor como argumento. Dessa maneira, garantimos que toda instância de uma Conta tenha os atributos que definimos.

Agora, se executarmos a linha de código abaixo, vai acusar um erro:

conta = Conta()

Traceback (most recent call last): File "<stdin>", line 1, in <module>
 
TypeError: init () missing 4 required positional arguments: 'numero', 'titular', 'saldo', and 'lim ite
 
O erro acusa a falta de 4 argumentos na hora de criar uma Conta . A classe Conta agora nos obriga a passar 4 atributos (numero, titular, saldo e limite) para criar uma conta:
 
conta = Conta('123-4', 'João', 120.0, 1000.0)
 
Veja que em nenhum momento chamamos o método init () . Quem está fazendo isso por debaixo dos panos é o próprio Python quando executa conta = Conta() . Como vimos, ele chama o
 
94 8.4 CONSTRUTOR
 
método new () que devolve um instância do objeto e em seguida chama o método init () toda vez que criamos uma conta. Podemos ver isto funcionando imprimindo uma mensagem dentro do método init () :
 
def __init__(self, titular, numero, saldo, limite): print("inicializando uma conta")
 
self.titular = titular self.numero = numero self.saldo = saldo self.limite = limite
 
e testar novamente:
 
conta = Conta('123-4', 'João', 120.0, 1000.0) inicializando uma conta
 
Ao criar uma Conta , estamos pedindo para o Python criar uma nova instância de Conta na memória, ou seja, o Python alocará memória suficiente para guardar todas as informações da Conta dentro da memória do programa. O new () , portanto, devolve uma **referência**, uma seta que aponta para o objeto em memória e é guardada na variável conta .
 
Para manipularmos nosso objeto conta e acessarmos seus atributos, utilizamos o operador "." (ponto):
 
java
print(conta.titular) #'João' print(conta.saldo) #120.0

Como o self é a referência do objeto, ele chama self.titular e self.saldo da classe Conta .

Agora, além de funcionar como esperado, nosso código não permite criar uma conta sem os atributos que definimos anteriormente. Discuta com seus colegas e instrutor as vantagens da orientação a objetos até aqui.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️