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

len() não funcionando.

Olá, não consigo entender o porquê deste código abaixo não retornar o len() no print.

Alguém pode me explicar por favor?

O erro retornado é: TypeError: object of type 'Playlist' has no len()

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


Filme_1 = filmes_favoritos("Avatar",2001, 100 )
Filme_2 = filmes_favoritos("Thor", 2010,160)
Filme_3 = filmes_favoritos("John Wick",2020,160)

class Playlist():
def __init__(self, nome, lista):
    self.nome = nome
    self.lista = lista
def __getitem__(self, item):
    return self.lista[item]

@property
def tamanho(self):
    return len(self.lista)
@property
def listagem(self):
    return self.lista


listinha = [Filme_1,Filme_2, Filme_3]

favoritos = Playlist("Super Lista",listinha)

print (len(favoritos))
1 resposta
solução!

Olá, tudo bem? Para usar o len() na orientação a objetos, é necessário adicionar o método especial len()

    def __len__(self):
        return len(self.lista)

Por exemplo, o getitem() também é um método especial e serve para tornar o objeto iterável.

Assim ficou o código adicionando o método especial len():

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


Filme_1 = filmes_favoritos("Avatar",2001, 100 )
Filme_2 = filmes_favoritos("Thor", 2010,160)
Filme_3 = filmes_favoritos("John Wick",2020,160)

class Playlist():
    def __init__(self, nome, lista):
        self.nome = nome
        self.lista = lista
    def __getitem__(self, item):
        return self.lista[item]

    def __len__(self):
        return len(self.lista)
    @property
    def tamanho(self):
        return len(self.lista)
    @property
    def listagem(self):
        return self.lista


listinha = [Filme_1,Filme_2, Filme_3]

favoritos = Playlist("Super Lista",listinha)

print (len(favoritos))

Espero ter ajudado.