1
resposta

Uso do self

Estava achando que o self só poderia ser usado com os atributos definidos na função construtora init , com esse exercício acabei não entendendo pois misturou com outras referências nos métodos. Gostaria de saber quais são as indicações para uso do self. Ex.:

class Conta:
    def __init__(self, numero, saldo, limite):
        self.__numero = numero
        self.__saldo = saldo
        self.__limite = limite
        self.__tarifaTransferencia = 8.0

    #NOVO MÉTODO AQUI
    def temSaldoDisponivelPara(self, valor):
        return valor < (self.__saldo + self.__limite)


    def saca(self, valor):

        if self.temSaldoDisponivelPara(valor):
            self.__saldo -= valor
            print("Saque efetuado.")
        else:
            print("Saldo insuficiente.")


    def transfere(self, valor, destino):


        valorTotal = valor + self.__tarifaTransferencia

        if self.temSaldoDisponivelPara(valorTotal):

            self.__saldo -= valorTotal
            destino.deposita(valor)

            print("Transferência efetuada.")
        else:
            print("Saldo insuficiente.")

Introduziu o self no temSaldoDisponivelPara ( def saca), fiquei com dúvidas pq o uso aqui.

1 resposta

Olá Natália,

Sua dúvida é bastante pertinente, muita gente faz confusão com o uso do self. Bem, o self é usado em classes no Python para indicar que você está referenciando alguma coisa do próprio objeto (sejam eles atributos ou métodos) - na verdade, o self é o próprio objeto em si.

Veja que nos métodos da classe você sempre passa o self (não é obrigatório) para que os métodos e atributos que você já definiu sejam acessíveis dentro do método que você está implementando. Em geral, quando criamos um construtor de uma classe (com o método __init__) colocamos o self nos atributos definidos ali para que eles sejam acessíveis nos métodos (raramente um atributo que você inicializa no construtor não será usado em algum canto na classe).

No caso do seu exemplo, especificamente, você teve que usar o self para chamar o método temSaldoDisponivelPara() pois você queria chamar o método que foi implementado dentro da classe. Se caso você não tivesse colocado o self você iria receber um erro, pois o python iria sair procurando essa tal de temSaldoDisponivelPara() nos imports e no próprio arquivo - menos na própria classe.

Espero ter ajudado a deixar mais claro o uso do self no python. Mas não tenha pressa, conforme você for programando e ir ganhando mais experiência na linguagem, isso se torna mais fácil de entender.

Artur Baruchi (Twitter @abaruchi)