Usei atributos com um undescore na superclasse para serem usados nas subclasses e com dois undescore nas subclasses. É o modo correto?
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