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!