1
resposta

Explicando o porquê do erro após atributo passar a ser privado self.__likes

Após transformar o like em privado aparece o erro no código. Não entendi quando o instrutor diz que 'em filme não tem mais nenhum atributo likes e não pode mais acessar' e o código não vai funcionar.

1 resposta

Se você definir um _ antes da variável, por convenção o método não deveria ser acessado, por mais que o Python não faça a conversão do atributo para nomeClasse__nomeAtributo - que ocorre quando você coloca o __ (underscore duas vezes).

class Programa:
    def __init__(self, nome, ano):
        self._nome = nome.title()
        self.ano = ano
        self._likes = 0

Se o seu código deu erro muito provavelmente é porque ainda não implementou o @property e está tentando acessar o atributo diretamente, conforme abaixo:


vingadores = Programa("Vingadores - Guerra Infinita", 2018)
vingadores.like # Erro nessa etapa

O correto é primeiro implementar o property para poder acessar da forma acima:

class Programa:
    def __init__(self, nome, ano):
        self._nome = nome.title()
        self.ano = ano
        self._likes = 0

    @property
    def like(self):
        return self._likes

vingadores = Programa("Vingadores - Guerra Infinita", 2018)
# Acessando diretamente os likes, mesmo o atributo sendo privado
print(vingadores.likes)