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 !?
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!