Olá,
Seria interessante postar o erro retornada para auxiliar na resposta, no entanto olhando apenas esse trecho já é possível tirar algumas conclusões.
Como o parâmetro é 'self', me leva a crear que essa função roda dentro de uma classe, e no inicializador da classe você passou a url como parâmetro, armazendo dentro de self.url. Dessa forma, se você tentar usar essa função sozinha fora da classe, quando você envia uma string (texto) para a função valida_url, logo na primeira linha ela tenta pegar self.url, sendo "self" a url que você passou. Se você digitou um link, ele vai como texto/string, e strings não permitem nada do tipo string.url, que é o que você tenta fazer ao digitar self.url.
Se você tentar rodar o código abaixo, é provável que funcione:
def valida_url(url):
if not url or not url.startswith('https://'):
raise ValueError('URL vazia ou Inválida !!')
padrao_url = re.compile('(http(s)?://)?(www.)?bytebank.com(.br)?/cambio')
match = padrao_url.match(url)
if not match:
raise ValueError('URL vazia ou invalida !')
Se a URL não iniciar com 'https://' ou dentro do padrão do seu Regex, é esperado um erro, porém isso porque seu código criar o erro via raise.
Abs