Usei atributos com um undescore na superclasse para serem usados nas subclasses e com dois undescore nas subclasses. É o modo correto?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Usei atributos com um undescore na superclasse para serem usados nas subclasses e com dois undescore nas subclasses. É o modo correto?
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)
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