Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro no código

Mesmo implementando o método __len__ o código continuou dando erro. Eu fiz o seguinte:

from collections.abc import Sized

class MinhaListagem(Sized):
    def __init__(self, descricao):
        self.descricao = descricao

    def __str__(self):
        return self.descricao

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

lista = MinhaListagem()
print(lista)
len(lista)

Erro: Traceback (most recent call last): File "C:/Users/karol/PycharmProjects/modelo/teste.py", line 13, in lista = MinhaListagem() TypeError: init() missing 1 required positional argument: 'descricao'

O código só funcionou quando eu inseri itens na lista:

from collections.abc import Sized

class MinhaListagem(Sized):
    def __init__(self, descricao):
        self.descricao = descricao

    def __str__(self):
        return self.descricao

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

lista = MinhaListagem('terra')
print(lista)
print(f'Tamanho da lista: {len(lista)}')

saída:

terra
Tamanho da lista: 5

Gostaria de saber porque ocorreu esse erro. Sempre que a lista estiver vazia ocorrerá erro?

3 respostas
solução!

Realmente dará erro, da forma que foi definida o objeto ela EXIGE que se passe um valor no construtor. Fiz uma correção e adicionei um valor default no argumento para correção e compartilhei em https://repl.it/repls/QuintessentialMaroonPentagon

from collections.abc import Sized

class MinhaListagem(Sized):
    def __init__(self, descricao="Sem descrição"):
        self.descricao = descricao

    def __str__(self):
        return self.descricao

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

lista = MinhaListagem()
print(lista)
len(lista)

Ah.. Legal, consegui entender. Muito obrigada Francisco.

Olá Caroline, tudo bem?

Como sua dúvida foi solucionada, estou fechando o tópico, ok?

Qualquer coisa não hesite em abrir outro :)