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 :)