Dei uma olhada nas dúvidas semelhantes, mas ainda estou com dúvidas.
No meu arquivo main py se eu "printo" a instância 2 (argumentosUrl2) antes de compará-la, eu vejo um True. Se eu comento, um False. Por quê?
main.py
from classe import ExtratorArgumentosUrl
url = "https://bytebank.com/cambio?moedaorigem=moedaDestino&moedaDestino=dolar&valor=700"
argumentosUrl = ExtratorArgumentosUrl(url)
argumentosUrl2 = ExtratorArgumentosUrl(url)
print(len(argumentosUrl))
print(argumentosUrl, id(argumentosUrl),"\n-----------------------------------")
# print(argumentosUrl2, id(argumentosUrl2))
print(argumentosUrl == argumentosUrl2)
classe.py
# -*- coding: utf-8 -*-
class ExtratorArgumentosUrl:
def __init__(self, url):
if self.url_eh_valida(url):
self.url = url.lower()
else:
raise LookupError("URL inválida")
def __str__(self):
moeda_origem, moeda_destino = self.extrai_argumentos()
valor = self.extrai_valor()
return f'Moeda origem: {moeda_origem}\nMoeda destino: {moeda_destino}\nValor: {valor}\n'
def __len__(self):
return len(self.url)
def __eq__(self,outra_instancia):
print(self.url,"\n",outra_instancia.url) # debug
return self.url == outra_instancia.url
@staticmethod
def url_eh_valida(url):
if url and url.startswith("https://bytebank.com"):
return True
else:
return False
def extrai_argumentos(self):
busca_moeda_origem = "moedaorigem="
busca_moeda_destino = "moedadestino="
indice_inicial_moeda_origem = self.encontra_indice_inicial(busca_moeda_origem)
indice_final_moeda_origem = self.url.find("&")
moeda_origem = self.url[indice_inicial_moeda_origem:indice_final_moeda_origem]
if moeda_origem == "moedadestino":
self.troca_moeda_origem()
indice_inicial_moeda_origem = self.encontra_indice_inicial(busca_moeda_origem)
indice_final_moeda_origem = self.url.find("&")
moeda_origem = self.url[indice_inicial_moeda_origem:indice_final_moeda_origem]
indice_inicial_moeda_destino = self.encontra_indice_inicial(busca_moeda_destino)
indice_final_moeda_destino = self.url.find("&valor=")
moeda_destino = self.url[indice_inicial_moeda_destino:indice_final_moeda_destino]
return moeda_origem, moeda_destino
def encontra_indice_inicial(self, moeda_buscada):
return self.url.find(moeda_buscada) + len(moeda_buscada)
def troca_moeda_origem(self):
self.url = self.url.replace("moedadestino","real",1)
def extrai_valor(self):
busca_valor = "valor="
indice_inicial_valor = self.encontra_indice_inicial(busca_valor)
valor = self.url[indice_inicial_valor:]
return valor