Que interessante! eu estou iniciando no estudo de python (atualmente utilizo apenas para resolver exercícios de algoritmos) e sempre me perguntei o que diabos eram esses metódos com dois underlines no inicio e ao fim. Esse teu post me deu o ânimo e a curiosidade para buscar além.

Valeu parça!

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 _.