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

Código dando erro, porém está idêntico ao do professor.

Meu code

class Programa:

    def __init__(self, nome, ano, ):
        self._nome = nome.title()
        self.ano = ano
        self._likes = 0

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

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

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

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


class Filme(Programa):

    def __init__(self, nome, ano, duracao):
        super().__init__(nome, ano)
        self.duracao = duracao


class Serie(Programa):

    def __init__(self, nome, ano, temporadas):
        super().__init__(nome, ano)
        self.temporadas = temporadas

    batman = Filme('Batman, o cavaleiro das trevas', 2008, 152)
    batman.dar_like()
    batman.dar_like()
    batman.dar_like()
    print(f'Nome: {batman.nome} - {batman.ano} - {batman.duracao} :{batman.likes}')

    house = Serie('House, M.D', 2018, 8)
    house.dar_like()
    house.dar_like()
    print(f'Nome: {house.nome} - {house.ano} - {house.temporadas} :{house.likes}')

    filmes_e_series = [batman, house]

    for programa in filmes_e_series:
        detalhes = programa.duracao if hasattr(programa, 'duracao') else programa.temporadas
        print(f'{programa.nome} - {detalhes} D - {programa.likes}')

entretanto:

Traceback (most recent call last):
  File "C:\Users\lucas\PycharmProjects\pythonProject\python3oo2\modelo.py", line 31, in <module>
    class Serie(Programa):
  File "C:\Users\lucas\PycharmProjects\pythonProject\python3oo2\modelo.py", line 43, in Serie
    house = Serie('House, M.D', 2018, 8)
NameError: name 'Serie' is not defined
Nome: Batman, O Cavaleiro Das Trevas - 2008 - 152 :3

Process finished with exit code 1

o que poderia ser?

desde já obrigado.

2 respostas
solução!

Oii Lucas, como você está?

Isso está ocorrendo por causa da indentação, ou seja, os recuos ou avanços (TABS) que colocamos no código para reforçar a estrutura do mesmo, para dizermos qual trecho de código está dentro de qual.

Observe o seguinte trecho de código da classe Serie:

class Serie(Programa):

    def __init__(self, nome, ano, temporadas):
        super().__init__(nome, ano)
        self.temporadas = temporadas

    batman = Filme('Batman, o cavaleiro das trevas', 2008, 152)
    batman.dar_like()
    batman.dar_like()
    batman.dar_like()
    print(f'Nome: {batman.nome} - {batman.ano} - {batman.duracao} :{batman.likes}')

    house = Serie('House, M.D', 2018, 8)
    house.dar_like()
    house.dar_like()
    print(f'Nome: {house.nome} - {house.ano} - {house.temporadas} :{house.likes}')

    filmes_e_series = [batman, house]

    for programa in filmes_e_series:
        detalhes = programa.duracao if hasattr(programa, 'duracao') else programa.temporadas
        print(f'{programa.nome} - {detalhes} D - {programa.likes}')

Da forma que acima, todo o código está dentro da classe Serie. Porém, toda a criação /manipulação dos objetos de Serie e Filme não deveriam ficar dentro dessa classe, pois não pertencem a classe.

Veja como fica a correção:

class Serie(Programa):

    def __init__(self, nome, ano, temporadas):
        super().__init__(nome, ano)
        self.temporadas = temporadas

batman = Filme('Batman, o cavaleiro das trevas', 2008, 152)
batman.dar_like()
batman.dar_like()
batman.dar_like()
print(f'Nome: {batman.nome} - {batman.ano} - {batman.duracao} :{batman.likes}')

house = Serie('House, M.D', 2018, 8)
house.dar_like()
house.dar_like()
print(f'Nome: {house.nome} - {house.ano} - {house.temporadas} :{house.likes}')

filmes_e_series = [batman, house]

for programa in filmes_e_series:
    detalhes = programa.duracao if hasattr(programa, 'duracao') else programa.temporadas
    print(f'{programa.nome} - {detalhes} D - {programa.likes}')

Agora, observe que os trechos de criação/manipulação do objeto não estão dentro da classe e isso foi demarcado pelo recuo do trecho.

Com essa correção o código deverá funcionar como esperado. Mas, qualquer dúvida estou por aqui, tá bom?

Abraços e bons estudos!

Obrigado, devo prestar mais atenção com relação a identação, obrigado mesmo :).