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

Código dando erro quando tento executar

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

vingadores = Filme("vingadores - guerra infinita", 2018, 160)
vingadores.dar_like()
print(f"Nome: {vingadores._nome}, ano: {vingadores.ano}, duração: {vingadores.duracao} min, likes: {vingadores._likes}")


atlanta = Serie("atlanta", 2017, 2)
atlanta.dar_like()
atlanta.dar_like()
print(f"Nome: {atlanta._nome}, ano: {atlanta.ano}, temporadas: {atlanta.temporadas}, likes: {atlanta._likes}")

Quando tento executar aparece o erro: AttributeError: 'Filme' object has no attribute 'dar_like'

1 resposta
solução!

Olá Marcos, tudo bem com você?

Existe um erro de indentação no código, os métodos likes, dar_like e nome estão dentro do método __ init__, dessa forma eles não são reconhecidos como um método da classe Programa mas sim funções do método __ init__.

Basta deixá-los fora do método __ init__ para o código funcionar corretamente, deixo abaixo o código para comparação.

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

vingadores = Filme("vingadores - guerra infinita", 2018, 160)
vingadores.dar_like()
print(f"Nome: {vingadores._nome}, ano: {vingadores.ano}, duração: {vingadores.duracao} min, likes: {vingadores._likes}")


atlanta = Serie("atlanta", 2017, 2)
atlanta.dar_like()
atlanta.dar_like()
print(f"Nome: {atlanta._nome}, ano: {atlanta.ano}, temporadas: {atlanta.temporadas}, likes: {atlanta._likes}")

Resultado

Nome: Vingadores - Guerra Infinita, ano: 2018, duração: 160 min, likes: 1
Nome: Atlanta, ano: 2017, temporadas: 2, likes: 2

Em caso de dúvidas, encontro-me à disposição.

Abraços e bons estudos.

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