1
resposta

'Table' object is not callable

Sigo com este erro 'Table' object is not callable, podem me ajudar?

from msilib.schema import Property

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()

    def __str__(self):
        return (f'Nome: {self._nome} - Ano: {self.ano} - Likes: {self._likes}')

#-----------------------------------------------------------

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

    def __str__(self):
        return (f'Nome: {self._nome} - Ano: {self.ano} - {self.duracao} min - Likes: {self._likes}')

#-----------------------------------------------------------

class Serie(Programa):

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

    def __str__(self):
        return (f'Nome: {self._nome} - Ano: {self.ano} - {self.temporadas} Seasons - Likes: {self._likes}')

#------------------------------------------------------------

class Playlist(list): #HERANÇA
    def __init__(self, nome, programas):
        self.nome = nome
        self._programas = programas

@Property
def listagem(self):
    return self._programas

@Property
def tamanho(self):
    return len(self._programas)

def __getitem__(self, item): #magicmethod  - ducktyping
    return self._programas[item]

vingadores = Filme('vingadores', 2018, 160 )

tlr1 = Filme('O senhor dos aneis: sociedade do anel', 2000, 300)
peakblinders = Serie("Peaking Blinders", 2020, 5)
breaking_bad = Serie('breaking bad', 2018, 2)

vingadores.dar_like()
breaking_bad.dar_like()

filmes_e_series = [vingadores, breaking_bad,peakblinders,tlr1] 

playlist_fim_de_semana = Playlist('fim de semana', filmes_e_series)

print(f'Tamanho do playlist: {len(playlist_fim_de_semana.listagem)}')
for programa in playlist_fim_de_semana:
    print(programa)

line 57, in def listagem(self): TypeError: 'Table' object is not callable

1 resposta

Olá Raphael, tudo bem com você?

O erro apresentado está ocorrendo devido ao uso de um decorators da biblioteca msilib.schema e não o decorators das funções builtins do Python, devemos utilizar o @property (iniciado com p minúsculo).

No código existem alguns pontos que serão necessário efetuar pequenas mudanças para que funcione conforme o proposto, deixo abaixo os pontos de verificação:

  • Nos métodos listagem e tamanho da classe Playlist, troque @Property (com P maiúsculo) por @property (com p minúsculo).
  • Os métodos listagem, tamanho e __getitem__ da classe Playlist estão fora da classe, selecione esses métodos e pressione tab, para que seja corrigido a identação do código.
  • Conforme apresentado na aula, a classe Playlist não será necessário a herança da classe list, por já possuir o método mágico __getitem__, assim podemos retirar a herança. Como apresentado na seguinte aula.

Efetuando as mudanças acima, a classe Playlist deverá se assemelhar ao código apresentado abaixo:

class Playlist:
    def __init__(self, nome, programas):
        self.nome = nome
        self._programas = programas

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

    @property
    def tamanho(self):
        return len(self._programas)

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

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

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