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

O yield não funciona, não sei bemm ainda ultilizalo, oq tem de errado no meu código?

class aulas:
    def __init__(self, dia, aula1, aula2, aula3, aula4, aula5, aula6, aula7, h1, h2, h3, h4, h5, h6, h7):
        self.dia = dia.upper()
        self.aula1 = aula1.upper()
        self.aula2 = aula2.upper()
        self.aula3 = aula3.upper()
        self.aula4 = aula4.upper()
        self.aula5 = aula5.upper()
        self.aula6 = aula6.upper()
        self.aula7 = aula7.upper()
        self.h1 = h1
        self.h2 = h2
        self.h3 = h3
        self.h4 = h4
        self.h5 = h5
        self.h6 = h6
        self.h7 = h7

    def __repr__(self):
        yield ("HOJE {} É SUAS AULAS DE HOJE SÃO".format(self.dia))
        yield ("1°- Àa {} HRS - {}".format(self.h1, self.aula1))
        yield ("2°- Àa {} HRS - {}".format(self.h2, self.aula2))
        yield ("3°- Àa {} HRS - {}".format(self.h3, self.aula3))
        yield ("4°- Àa {} HRS - {}".format(self.h4, self.aula4))
        yield ("5°- Àa {} HRS - {}".format(self.h5, self.aula5))
        yield ("6°- Àa {} HRS - {}".format(self.h6, self.aula6))
        yield ("7°- Àa {} HRS - {}".format(self.h7, self.aula7))
        yield ("-------------------")

class Segunda(aulas):
    def __init__(self, dia, aula1, aula2, aula3, aula4, aula5, aula6, aula7, h1, h2, h3, h4, h5, h6, h7):
        super().__init__(dia, aula1, aula2, aula3, aula4, aula5, aula6, aula7, h1, h2, h3, h4, h5, h6, h7)
        self.dia = dia.upper()
        self.aula1 = aula1.upper()
        self.aula2 = aula2.upper()
        self.aula3 = aula3.upper()
        self.aula4 = aula4.upper()
        self.aula5 = aula5.upper()
        self.aula6 = aula6.upper()
        self.aula7 = aula7.upper()
        self.h1 = h1
        self.h2 = h2
        self.h3 = h3
        self.h4 = h4
        self.h5 = h5
        self.h6 = h6
        self.h7 = h7




class terca(aulas):
    def __init__(self, dia, aula1, aula2, aula3, aula4, aula5, aula6, aula7, h1, h2, h3, h4, h5, h6, h7):
        super().__init__(dia, aula1, aula2, aula3, aula4, aula5, aula6, aula7, h1, h2, h3, h4, h5, h6, h7)
        self.dia = dia.upper()
        self.aula1 = aula1.upper()
        self.aula2 = aula2.upper()
        self.aula3 = aula3.upper()
        self.aula4 = aula4.upper()
        self.aula5 = aula5.upper()
        self.aula6 = aula6.upper()
        self.aula7 = aula7.upper()
        self.h1 = h1
        self.h2 = h2
        self.h3 = h3
        self.h4 = h4
        self.h5 = h5
        self.h6 = h6
        self.h7 = h7

class playlist:
    def __init__(self, nome, dias):
        self.nome = nome
        self.dias = dias

    def __getitem__(self, item):
        return self.dias[item]

    @property
    def listagem(self):
        return self.dias

    def tamanho(self):
        return len(self.dias)


segunnda_feira = Segunda("segunda - feira", "hist","hist","fís","filo", "inglês","quim", "quim","07:05", "07:50", "08:35", "09:40", "10:25", "11:10", "11:55")
terca_feira = terca("terça - feira", "bio", "hist", "mat", "mat", "inglês", "bio", "reli", "07:05", "07:50", "08:35", "09:40", "10:25", "11:10", "11:55" )

dias_aul = [segunnda_feira, terca_feira]
play_do_dia = playlist("play do lulu", dias_aul)

print(segunnda_feira in play_do_dia)

print("Tamanho da playlist {}".format(len(play_do_dia.listagem)))

for aulas in play_do_dia:
    print(aulas)
1 resposta
solução!

Oii Luigge, como você está? Espero que esteja bem ^-^

Quando falamos sobre yield, essa palavrinha chave está atrelada ao conceito de geradores/generators, que são funções que retornam um valor de cada vez e isso geralmente é utilizado quando possuímos pouca memória e gerar todos os valores de uma só vez, pode comprometê-la. Veja um exemplo prático de um gerador. Como base, pegaremos a seguinte função:

def exemplo_de_gerador():
  print("Primeira Frase")
  print("Segunda Frase")
  print("Terceira Frase")
  print("Quarta Frase")

Se execurtamos a função, teremos o seguinte resultado:

Primeira Frase
Segunda Frase
Terceira Frase
Quarta Frase

Até esse ponto nada de novo, certo? Agora, se colocarmos a palavrinha mágica yield no código, veja o que acontece:

def exemplo_de_gerador():
  print("Primeira Frase")
  yield
  print("Segunda Frase")
  yield
  print("Terceira Frase")
  yield
  print("Quarta Frase")

Quando executarmos a função do modo convencional:exemplo_de_gerador(), será nos mostrado algo como:

<generator object exemplo_de_gerador at 0x7f8f857a0750>

Mas o que isso significa? Significa que a partir do momento que colocamos o yield no código, a função se tornou um gerador, ou seja, ela irá retornar um valor de cada vez e para pegarmos esse valor de retorno, devemos utilizar a palavrinha chave next. Veja:

funcao = exemplo_de_gerador()
next(funcao)

O resultado será apenas "Primeira Frase", pois por ser um gerador, irá retornar um valor de cada vez. Se executarmos novamente o next, ele nos devolverá o próximo valor e assim por diante, até que não tenha mais valores a serem retornados e o programa retorne Stop Interation:

funcao = exemplo_de_gerador()
next(funcao)
next(funcao)

## Resultado

Primeira Frase 
Segunda Frase

Dito isso e voltando ao seu código, ele não está funcionando porque por padrão o método __repr__ retornar um tipo str e no seu caso, ao utilizar o yield, você está gerando um tipo de valor, o que faz a função ser do tipo gerador e não str.

Sendo assim, para corrigir o código atual, é necessário retornar uma string. Veja como fica:

def __repr__(self):
    return ("HOJE {} É SUAS AULAS DE HOJE SÃO".format(self.dia) + "\n"
    "1°- Àa {} HRS - {}".format(self.h1, self.aula1) + "\n" 
    "2°- Àa {} HRS - {}".format(self.h2, self.aula2) + "\n"
    "3°- Àa {} HRS - {}".format(self.h3, self.aula3) + "\n"
    "4°- Àa {} HRS - {}".format(self.h4, self.aula4) + "\n"
    "5°- Àa {} HRS - {}".format(self.h5, self.aula5) + "\n"
    "6°- Àa {} HRS - {}".format(self.h6, self.aula6) + "\n"
    "7°- Àa {} HRS - {}".format(self.h7, self.aula7) + "\n"
    "-------------------")

Outro ponto de atenção em seu código, é o modo como você utiliza a herança de classes. Nela, você chama o método __init__ da classe mãe "Aulas", e como todos os atributos são os mesmos, não há a necessidade de atribuir os valores após a invoção do método da classe mãe. Veja como fica:

class Segunda(Aulas):
    def __init__(self, dia, aula1, aula2, aula3, aula4, aula5, aula6, aula7, h1, h2, h3, h4, h5, h6, h7):
        super().__init__(dia, aula1, aula2, aula3, aula4, aula5, aula6, aula7, h1, h2, h3, h4, h5, h6, h7)

Vale ressaltar também, sobre o padrão de nomenclatura das variáveis. Segundo a PEP 8, o guia de estilos de código Python, os nomes das classes devem estar no padrão PascalCase, onde a primeira letra de cada palavra é maiúscula. Em seu código em algumas classes há esse padrão, já em outras não. É interessante padronizar.

O código completo com as mudanças citadas, pode ser acessado neste gist do github

Como complemento, deixo abaixo um artigo do blog da Alura que trata sobre o assunto de geradores:

Qualquer dúvida estou por aqui, a gente vai conversando.

Grande abraço e bons estudos!

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