Oi, Roger! Vamos lá:
1 - Esse argumento passado no parâmetro da definição da classe é apenas a forma como o Python trabalha com o conceito de herança. Ou seja, quando fazemos class MinhaClasse(Perfil)
, estamos dizendo para a classe MinhaClasse
herdar os métodos e os atributos da classe Perfil
, para eles ficarem disponíveis também em MinhaClasse
. Basicamente, estou dizendo que MinhaClasse é um Perfil. A classe ArgumentoInvalidoError
, entretanto, é uma exceção que estamos querendo criar, não um perfil (por isso não herda de Perfil
). As exceções no Python, por sua vez, têm que herdar da classe mais básica Exception
para funcionarem corretamente :D.
2 - Bem observado, Roger! Esse estilo de nomeação __nomedométodo__
é característico de alguns métodos especiais, como o __init__()
(o construtor) e, nesse caso, o __str__()
, chamado quando usamos a função str()
. Aqui tem uma lista desses métodos, se você quiser dar uma olhada :D!
Abraços e bons estudos!