Esta foi uma questão que hoje me chegou via PM aqui no P@P: para que servia o
if __name__ == '__main__': usado em muitos programas.
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
GeSHi (python):
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))
Created by GeSHI 1.0.7.20
omeuprograma.py
GeSHi (python):
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!"
Created by GeSHI 1.0.7.20
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.

2007 by djthyrax @ PyTeam.