porque invés de usar
extrator_url = ExtratorURL(url)
print("O tamanho da URL: ", len(extrator_url))
usasse
extrator_url = ExtratorURL(url)
print("O tamanho da URL:", len(url))
que já vai direto pra url, sempre precisa usa def !?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
porque invés de usar
extrator_url = ExtratorURL(url)
print("O tamanho da URL: ", len(extrator_url))
usasse
extrator_url = ExtratorURL(url)
print("O tamanho da URL:", len(url))
que já vai direto pra url, sempre precisa usa def !?
Oi, tudo certo por aí?
No primeiro exemplo que você mencionou, temos o método len() sendo aplicado diretamente na string da URL. Isso funciona porque a classe str (que dá origem a uma string) já possui o método __len__() implementado, que retorna o tamanho da string.
No segundo exemplo, temos o método len() em um objeto da classe ExtratorURL. No entanto, a classe ExtratorURL não possui o método __len__() implementado por padrão — uma vez que, ao criá-la, não especificamos tal característica.
Para resolver esse problema, precisamos implementar o método __len__() na classe ExtratorURL. Esse método deverá retornar o tamanho da URL, assim como você fez no método __len__() da classe str. Observe o exemplo abaixo:
class ExtratorURL:
# restante do código vem aqui!
def __len__(self):
return len(self.url)
Dessa forma, quando você chamar o método len() em um objeto da classe ExtratorURL, ele irá retornar o tamanho da URL.
A utilização de def, neste caso, é importante, haja vista que é a maneira pela qual definimos métodos especiais, em uma classe, no Python.
Espero que tenha ficado mais claro! Qualquer dúvida, fico à disposição.
Um abraço!