Opa eae Arthur, tudo certo?
Sobre o __name__:
Na documentação basicamente diz que o __name__ é o nome completo do módulo, usado pra unicamente identificar esse modulo no sistema de importações.
Aqui você pode ver que um módulo é um arquivo .py que pode conter classes, funções e variáveis globais.
Sobre o __main__:
De acordo com a documentação __main__ é o nome do escopo no qual o código de nível mais alto executa.
Mas o que isso significa?
Isso basicamente vai significar que __main__ é o nome do arquivo que você está rodando o código.
Sobre o if __name__ == "__main__":
Ou seja, quando você faz if __name__ == '__main__' você está perguntando "Será que o arquivo que eu estou executando (__main__) é o módulo que eu estou executando (__name__)?"
Se o módulo que eu estou executando é o arquivo que eu estou executando então eu estou executando meu módulo diretamente dentro dele sem importar ele pra lugar nenhum.
Quando eu importo meu módulo pra outro lugar o __name__ dele vai ser o nome do módulo + path necessario.
Por exemplo, se eu tenho um arquivo teste.py dentro da pasta testando e eu quero importar a classe PrimeiroTeste pra um arquivo (exemplo.py) na raiz do meu projeto eu vou ter que fazer from testando.teste import PrimeiroTeste.
Se no meu teste.py tem um if __name__ == '__main__' e eu estou executando dentro do exemplo.py vai dar falso pq o __main__ vai ser o exemplo.py mas o meu if está pegando o __name__ do teste.py que nesse caso seria testando.teste.
Agora se eu executar meu código dentro do teste.py meu if vai passar porque o __main__ vai ser o teste.py e meu __name__ vai ser teste.py já que o __name__ é o nome do módulo e como eu estou dentro dele eu não preciso passar o path dele sendo assim o path dele vai ser o próprio nome dele, que é igual ao __main__.
Sobre o Import de módulos:
O nome que usamos pra importar os módulos é o caminho para o arquivo que nós queremos importar.
Se ambos os arquivos estão na raiz do seu projeto vai ser apenas o nome do arquivo (sem .py).
Se o arquivo estiver em outra pasta vai ser o caminho desde a raiz do seu projeto até esse arquivo que você quer importar.
Se você só quiser importar uma unica coisa de dentro do arquivo você pode usar o from caminho.ate.o.arquivo import unica_coisa essa 'unica coisa' pode ser uma classe, uma função ou uma variavel.
Espero que tenha entendido tudo agora. Qualquer duvida só perguntar :)