1
resposta

AttributeError: type object 'programa' has no attribute 'duracao'

Boa Noite,

Não consigo achar o erro, alguem poderia ajudar?

erro: AttributeError: type object 'programa' has no attribute 'duracao'
class programa:
    def __init__(self,nome,ano):
        self._nome=nome.title()
        self.ano=ano
        self._like=0

    @property
    def like(self):
        return self._like

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


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

    @nome.setter
    def nome(self,valor):
        self._nome=valor.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





vingadores=Filme('vingadores',2018,160)
loki=Serie('loki',2021,1)
print(vingadores.nome,vingadores.like)
print(loki.nome,loki.like)
loki.dar_like()
loki.dar_like()
print(loki.nome,loki.like)

print('---'*15)


fimes_e_series=[vingadores,loki]


for c in fimes_e_series:
    detalhes = programa.temporadas if hasattr(programa,'temporadas') else programa.duracao
    print(f'{c.nome} {c.like} {detalhes}')
1 resposta

Olá Hugo, tudo bem com você?

O erro, AttributeError: type object 'programa' has no attribute 'duracao' está sendo levantado devido à tentativa de acesso a um método que não foi declarado na classe programa.

Quando estamos trabalhando com um laço de repetição for, queremos que o Python percorra um determinado objeto e a cada interação salve esse objeto em uma variável. Neste caso estamos percorrendo a lista fimes_e_series e salvando cada objeto dessa lista na variável c. Como apresentado abaixo:

for c in fimes_e_series:

Quando estamos declarando a variável detalhes devemos fazer o uso dos objetos que foram salvos na variável c, mas quando realizamos a declaração, é feita a tentativa de acesso aos atributos presentes no objeto programa, exemplo: programa.duracao. Como objeto programa não foi declarado no laço for, ocorre uma tentativa de acesso ao método não existente na classe programa, gerando assim o erro.

Para corrigir o erro de atributo, troque a variável de nome c por programa, como apresentado abaixo.

for programa in fimes_e_series:

Será necessário também realizar a troca da variável c pela variável programa no momento em que ocorre a impressão dos resultados. Ficando como apresentado abaixo.

print(f'{programa.nome} {programa.like} {detalhes}')

Deixo abaixo o código completo com as mudanças necessárias, após realizá-las, salve o arquivo e execute-o.

for programa in fimes_e_series:
    detalhes = programa.temporadas if hasattr(programa,'temporadas') else programa.duracao
    print(f'{programa.nome} {programa.like} {detalhes}')

Lembre-se que pode contar sempre com o fórum Alura, seja para tirar suas dúvidas, ou para compartilhar o seu desenvolvimento.

Fico à disposição.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!