3
respostas

Dúvida sobre o __init__ e self

Pelo o que eu entendi, o self nem o init são obrigatórios, o init é apenas pra quando eu chamar a classe Conta() na minha variável conta já iniciar a função init, correto? Referente ao self, ele serve pra eu acessar o objeto que está armazenado na memória do sistema, correto? Caso eu queria acessar um valor que por exemplo está em meu banco de dados não é necessário usar o self?

3 respostas

Oi, Caique, tudo bem?

O método __init__ em Python é o que chamamos de construtor. Ele é chamado automaticamente quando você cria uma nova instância da classe. Então, se você tem uma classe Conta e cria uma nova conta com conta = Conta(), o Python automaticamente chama o método __init__ para essa nova instância. O __init__ não é obrigatório, mas é uma prática comum usá-lo para inicializar os atributos do objeto. Por exemplo:

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

Neste caso, quando você cria uma nova conta, você precisa fornecer um titular e um saldo inicial, como em conta = Conta('Caique', 100.0).

Em relação ao self, ele é uma referência ao objeto atual. Isso significa que, quando você está em um método da classe, você pode usar self para acessar outros métodos ou atributos desse mesmo objeto. Por exemplo, em um método deposita na classe Conta, você poderia ter algo como:

class Conta:
    # ...
    def deposita(self, valor):
        self.saldo += valor

Neste caso, self.saldo é o saldo da conta na qual o método deposita está sendo chamado.

Agora, sobre acessar um valor que está em seu banco de dados, a necessidade do self vai depender de como você está estruturando seu código. Se o valor que você quer acessar é um atributo do objeto (como o saldo no exemplo acima), então, sim, você precisaria usar self. Se o valor é algo que você está buscando diretamente do banco de dados e não é um atributo do objeto, então você não precisaria do self.

Espero ter ajudado. Caso tenha dúvidas, não hesite em postar no fórum!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Deixa eu ver se eu entendi o código apresentado poderia ser reescrito dessa forma?

class Conta: # ... def deposita(Conta, valor): Conta.saldo += valor

Se eu não quisesse usar o Self já que o self referencia o objeto ou entendi errado?

Oi, Alex,

O uso do self é fundamental em classes em Python para referenciar o objeto atual da classe. No seu código original, o self é usado para se referir ao objeto Conta em que você está chamando o método deposita e, assim, permitir que você acesse e modifique o atributo saldo desse objeto.

O código que você propôs (def deposita(Conta, valor)) não é uma maneira adequada de definir o método deposita. Nesse caso, Conta não está referenciando o objeto atual da classe, e sim um parâmetro que você está passando para o método. Portanto, Conta.saldo não faz referência a nenhum objeto específico e resultaria em um erro.

Espero ter ajudado. Caso tenha dúvidas, não hesite em postar no fórum.

Abraços e bons estudos!