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

codigo n funciona

o codigo falho

class programas:
    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

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

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

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

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





vingadores = filme('vingadores',2018,160)
vingadores.like()
print(f'nome: {vingadores.nome} - ano: {vingadores.ano} - duracao : {vingadores.duracao} - like:{vingadores.likes}')


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




limitless = serie('limitless', 2017, 1)
limitless.like()

limitless.nome = 'limitless'

print(f'nome: {limitless.nome} - ano: {limitless.ano} - temporadas : {limitless.temporadas} - like:{limitless.likes}')

o codigo do professor

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_likes(self):
        self._likes += 1

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

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

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

vingadores = Filme('vingadores - guerra infinita', 2018, 160)
atlanta = Serie('atlanta', 2018, 2)
vingadores.dar_likes()
vingadores.dar_likes()
vingadores.dar_likes()

atlanta.dar_likes()
atlanta.dar_likes()

print(f'Nome: {vingadores.nome} - Likes: {vingadores.likes}')
print(f'Nome: {atlanta.nome} - Likes: {atlanta.likes}')

o resultado do codigo falho

Traceback (most recent call last):
  File "C:/Users/User/Documents/historias, criatividade e ciencia/programas/play.py", line 32, in <module>
    vingadores = filme('vingadores',2018,160)
  File "C:/Users/User/Documents/historias, criatividade e ciencia/programas/play.py", line 25, in __init__
    super().__init__(nome, ano)
TypeError: __init__() missing 1 required positional argument: 'duracao'

Process finished with exit code 1

oque deveria acontecer

Nome: Vingadores - Guerra Infinita - Likes: 3
Nome: Atlanta - Likes: 2

Process finished with exit code 0

nota: as diferensas de nomes vingadores e limitless para o atlanta no nome do professor é intencional e não é a causa

1 resposta
solução!

Ao criar a classe 'programas' dessa maneira

class programas:
     def __init__(self, nome, ano, duracao):

Você obrigatoriamente deve passar todos os parâmetros para instanciar ou criar uma classe filha da Classe programas

o erro está em:

class serie(programas):
    def __init__(self,nome,ano,temporadas):

pois a função __init__ da classe serie, que seria uma classe filha da classe programas, não está recebendo o argumento 'duracao'

TypeError: __init__() missing 1 required positional argument: 'duracao'

Você pode fazer como no código do professor, que não passa 'duracao' como argumento para a classe programa

class Programa:
    def __init__(self, nome, ano):

Ou adicionar o argumento 'duracao' a classe Serie

class Serie(Programa):
    def __init__(self, nome, ano, duracao, temporadas):