Que bom que gostou BrauUu!
Para esclarecer, quando usa-se dois underlines no início e fim, trata-se de métodos mágicos. No entanto, quando usa-se atributos com dois underlines no início, sem underlines no fim, trata-se de atributos/métodos privados, por exemplo __atributo_tal
, nesse caso, é uma convenção.
No caso de uso em classes em específico não é uma convenção exatamente. Por exemplo, supondo que tenha uma classe qualquer:
class Example:
def __init__(self, atributo_tal) -> None:
self.__atributo_tal = atributo_tal
E após isso você a instancie e tente acessar o atributo __atributo_tal
da instância, como demonstrado a seguir:
example = Example("um valor qualquer")
print(example.__atributo_tal)
Fazendo isso você se depararia com um AttributeError
, por causa do conceito de name mangling
do python.
AttributeError: 'Example' object has no attribute '__atributo_tal'
Mas de fato existe uma convenção, e ela se dá de maneira parecida com o que mencionou acima. Ao invés de __atributo_tal
seria _atributo_tal
, com apenas um único _.