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/