Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Aparece none no meu código como tirar?

class musica:
    def __init__(self, nome, autor, tom):
        self._nome  = nome.title()
        self._autor = autor.title()
        self._tom   = tom.title()

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

    @property
    def autor(self):
        return self._autor

    @property
    def tom(self):
        return self._tom

    @tom.setter
    def new_tom(self, new_tom):
        self._tom = new_tom

    def imprime(self):
        print("Nome = {} - Autor = {} - Tom = {} ".format(self.nome, self.autor, self.tom))

class amor_de_violeiro(musica):
    def __init__(self, nome, autor, tom):
        super().__init__(nome, autor, tom)


    @property
    def letra_pro(self):
        print("LETRA")
        print("[Intro] C  F  C  F  C")
        print("   C         F              C ")
        print("E|-0----1/3--5-5-5-5--3--1--3-3-3-3--1--0-----------|")
        print("B|-1-1--3/5--6-6-6-6--5--3--5-5-5-5--3--1-----------|")
        print("G|-0------------------------------------------------|")
        print("D|-2------------------------------------------------|")
        print("A|-3------------------------------------------------|")
        print("E|--------------------------------------------------|")

        print("      F             C")
        print("E|-5-5-5-5--3-1--0----------------------------------|")
        print("B|-6-6-6-6--5-3--1----------------------------------|")
        print("G|---------------0----------------------------------|")

    @property
    def converte(self):
        return amor_de_violeiro.letra_pro




    def imprime(self):
        print("Nome = {} - Autor = {} - Tom = {} ".format(self.nome, self.autor, self.tom))
        print(amor_de_violeiro.converte)


class fio_de_cabelo(musica):
    def __init__(self, nome, autor, tom, letra):
        super().__init__(nome, autor, tom)
        self.letra = letra

    def imprime(self):
        print("Nome = {} - Autor = {} - Tom = {} ".format(self.nome, self.autor, self.tom))
        print("Letra = {}".format(self.letra))


# PARTE DO PRINT
amor_de_violeiro = amor_de_violeiro("amor de violeiro", "Eduardo Costa", "C")
fio_de_cabelo    = fio_de_cabelo("fio de cabelo", "chirtãozinho e xôroró", "c", "lllll")

#  VARIÁVEL
musicas = [fio_de_cabelo, amor_de_violeiro]

for musica in musicas:
    musica.imprime()
1 resposta
solução!

Oii Luigge, como você está?

Isso está acontecendo por causa do seguinte trecho no método imprime da classe amor_de_violeiro:

print(amor_de_violeiro.converte)

Um função/método quando não tem retorno explícito, por padrão retorna None. Ao chamar a property converte, você chama a outra property letra_pro que por não ter retorno, retorna None implicitamente.

Então quando você chama a property converte, o código o caminho que o código faz é o seguinte:

  • O método converte retorna explicitamente a property letra_pro e essa property printa na tela a cifra da música
  • Porém, como essa property letra_pro não está retornado nada explicitamente, por padrão ela retorna None, por esse motivo o None é impresso em seu código.

Como corrigir?

Basta chamar apenas a property, sem a necessidade de printar o retorno através do print ou seja:

amor_de_violeiro.converte

Qualquer dúvida estou por aqui, tá bom?

Grande abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software