Ir para o conteúdo

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.