1
resposta

Argumentos passados invalidos

Ola, minha duvida é em relacao aos parametros passados na criacao do objeto: meu_objeto = Listinha(1, 2, 4)

Sao passados 3 parametros mas no metodo init somente um e requerido.

Seria o caso de passar uma list como parametro. E alem disso o metodo iter nao iria apresentar erro mesmo assim?

1 resposta

Olá, Felipe, beleza?

Cara, esse código da aula tem alguns errinhos mesmo.

Primeiro,

    def __init__(self, items)
        self.items = items

faltou os dois pontos ao final da função.

E da forma como está no (self, items) realmente não dá pra instanciar meu_objeto como instância da classe Listinha. O método __init__ pede somente um parâmetro e a gente enviou 3 parâmetros. O programa não rodará assim.

Pra resolver o problema, o inicializador da instância deveria estar assim:

    def __init__(self, *items):
        self.items = items

O asterisco empacota os argumentos, o que permite que seja passado como parâmetro para o __init__ um conjunto de parâmetros, no caso do exemplo, números que formariam uma lista.

Mas para a classe Listinha ser realmente uma lista, ela deveria ser algo assim:

class MinhaLista:
    def __init__(self, *items):
        self.items = items

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

    def __iter__(self):
        return self.items.__iter__()

    def __str__(self):
        return f'{list(self.items)}'

    def __getitem__(self, key):
        return self.items[key]

No console:

lista = MinhaLista(1, 2, 3, 4)
print(lista)
for i in lista:
    print(i)

dá output:

[1, 2, 3, 4]
1
2
3
4

Deu pra entender assim? Espero que tenha ficado mais claro. Ah, e pra entender melhor o asterisco que coloquei em *items, dá uma lida nisso aqui. Vai te ajudar muito: https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/