O if __name__ == '__main__': serve para se saber se se está a correr o ficheiro directamente ou se está a ser importado por outro programa. Desta maneira, podemos usar o mesmo ficheiro sem ter que fazer alterações para testar o módulo, correndo-o directamente, ou importá-lo directamente noutro programa.
Aqui fica um exemplo:
aminhalib.py
class oMeuObjecto: def __init__(self, nome, lulz = ''): self.nome = nome self.misc = [] if lulz.strip != '': self.misc.append(lulz) if __name__ == '__main__': teste = oMeuObjecto('ola') print "Conteudos do objecto:\nNome: %s\nMisc: %s" % (self.nome, str(self.misc))
omeuprograma.py
import aminhalib users = [] clientesTratados = [] for nome in ["ola", "ole", "jose", "xutos", "pontapes"]: users.append(aminhalib.oMeuObjecto(nome)) for user in users: print "Deseja definir o número de '%s' como 123456789?" % user.nome if raw_input().lower() == 'y': user.misc.append("Numero: 12345679") clientesTratados.append(user) print print "Adeus!"
Se corrermos o aminhalib.py
, o output que recebemos vai ser:
[djthyrax@pyteam ~]$ python aminhalib.py Conteudos do objecto: Nome: ola Misc: []
No entanto, isto não vai aparecer correndo o omeuprograma.py:
[djthyrax@pyteam ~]$ python omeuprograma.py Deseja definir o número de 'ola' como 123456789? y Deseja definir o número de 'ole' como 123456789? n Deseja definir o número de 'jose' como 123456789? n Deseja definir o número de 'xutos' como 123456789? n Deseja definir o número de 'pontapes' como 123456789? y Adeus!
Como se pode ver, com o if __name__ == '__main__':, podemos testar o módulo em si e, sem ter que apagar o código de teste, usar o ficheiro numa aplicação.