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

Setter não está funcionando

class Filme:
    def __init__(self, nome, ano, duracao):
        self.__nome = nome.title()
        self.ano = ano
        self.duracao = duracao
        self.__likes = 0

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

    def dar_likes(self):
        self.__likes+=1

    @property
    def nome(self):
        return self.__nome

    @nome.setter
    def nome(self,nome):
        self.__nome = nome

class Serie:
    def __init__(self, nome, ano, temporadas):
        self.__nome = nome.title()
        self.ano = ano
        self.temporadas = temporadas
        self.__likes = 0

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

    def dar_likes(self):
        self.__likes += 1

    @property
    def nome(self):
        return self.__nome

    @nome.setter
    def nome(self, nome):
        self.__nome = nome

vingadores = Filme('vingadores - guerra infinita', 2018, 160)
print(vingadores.nome)
vingadores.nome = 'vigadores'
print(vingadores.nome)

Mesmo com o código igual o do exemplo o setter não esta aplicando a titularização.. Estou comentendo algum erro?

2 respostas
solução!

Oi Bruno, tudo bem?

Isto está ocorrendo porque quando instanciamos a classe Filme, o método title é aplicado, então, quando printamos vingadores.nome no primeiro print, o nome está com a propriedade title, uma vez que fizemos a instanciação da classe e com isso, o método title foi aplicado, veja:

self.__nome = nome.title()

Já no método setter, não possuímos esta propriedade. Ele apenas recebe o novo nome. Então, para aplicar a propriedade title no setter, temos que fazer:

    @nome.setter
    def nome(self,nome):
        self.__nome = nome.title()

Com isso, acredito que alcançará o resultado desejado.

Espero ter ajudado. Abraços e bons estudos!

Verdade, acabei passando batido e não prestei atenção nesse trecho. Muito obrigado!