Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Se usa atributos privados numa subclasse de uma classe com atributos protected?

Usei atributos com um undescore na superclasse para serem usados nas subclasses e com dois undescore nas subclasses. É o modo correto?

3 respostas

Fiz o método dar_likes como protect também. Está correto? O meu código bem parecido com o do professor com algumas modificações:

class Produto():
    def __init__(self, nome, ano):
        self._nome = nome
        self._ano = ano
        self._likes = 0

    def _dar_likes(self):
        self._likes += 1

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

    @property
    def nome(self):
        return self._nome.title()

    def __str__(self):
        return f'{self._nome} - {self._ano} - {self._likes} likes'

class Filme(Produto):
    def __init__(self, nome, ano, duracao):
        super().__init__(nome, ano)
        self.__duracao = duracao

    def __str__(self):
        return f'{self._nome} - {self._ano} - {self.__duracao} min - {self._likes} likes'


class Musica(Produto):
    def __init__(self, nome, ano, artista):
        super().__init__(nome, ano)
        self.__artista = artista

    def __str__(self):
        return f'{self._nome} - {self._ano} - {self.__artista} - {self._likes} likes'


matrix = Filme("Matrix", "1999", 120)
time = Musica("Time", "1979", "Pink Floyd")



matrix._dar_likes()
matrix._dar_likes()

time._dar_likes()


lista_programas = [time, matrix]

for programa in lista_programas:
    print(programa)
solução!

O uso de um único underscore é mais um consenso da comunidade do que uma função da linguagem capaz de realmente classificar o atributo como privado ou protected.

No caso do método dar_likes(), penso que o melhor seria deixar sem o underscore, já que será chamado fora da classe.

Ms entendi a sua ideia de protected, como no Java.

Pelo que eu entendo, o underscore na função dar likes não faz taanto sentido, já que como uma função setter você iria precisar acessar ela constantemente.

Ai nesse caso, pra mim, o undersore até atrapalha um pouco