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