1
resposta

Existe um possível erro no uso da função title()

Boa noite, percebi que o código final desta aula se manteve a função title() na váriavel "nome" que está sendo recebida por parâmetro

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

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

e também a repetimos no metodo Set:

    def nome(self, novo_nome):
        self.__nome = novo_nome.title()

Se retirarmos a função title() onde esta sendo recebida por parâmetro o código resultará em um print do nome da serie e/ou filme com as letras minúsculas não importando se vocês está usando ela no metodo setter.

Dúvida, isso está correto? Na aula foi falado que dentro do método setter estáriamos "corrigindo" o problema de impressão com letras minúsculas no minuto "5:30".

Abaixo estou enviando a única forma que consegui fazer funcionar o "Title()"

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

    #metodo get(equivalente ao java)
    @property
    def likes(self):
        return self.__likes


    #metodo get(equivalente ao java)
    @property
    def nome(self):
        return self.__nome


    #metodo set(equivalente ao java)
    @nome.setter
    def nome(self, novo_nome):
        self.__nome = novo_nome


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


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

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

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

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


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


exterminador_do_futuro = Filme("exterminador do futuro", 2003, 160)
exterminador_do_futuro.dar_like()
print(f"Nome: {exterminador_do_futuro.nome}, Ano: {exterminador_do_futuro.ano}, Duração: {exterminador_do_futuro.duracao}, - Likes: {exterminador_do_futuro.likes}")

suits = Serie("suits", 2015, 9)
suits.dar_like()
suits.dar_like()

print(f"Nome: {suits.nome}, Ano: {suits.ano}, Temporadas: {suits.temporadas}, - Likes: {suits.likes}")

Fiz alguma coisa errada?

Atenciosamente,

Thiago Gomes

1 resposta

Coloca o tittle() no @nome.setter também:

def nome(self, novo_nome):
        self.__nome = novo_nome.title()

Do jeito que o seu código tá, se você alterar o nome do filme/série com esse método, as iniciais não vão ficar maiúsculas:

exterminador_do_futuro.nome = "exterminador do futuro"
print(exterminador_do_futuro.nome)

Retorno:

exterminador do futuro

Se você colocar nos dois métodos (construtor e setter), você vai garantir que as iniciais ficarão maiúsculas quando o objeto for criado e quando o atributo "nome" for alterado