• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

djthyrax

[Python] [PyTeam] if __name__ == '__main__' - Para que serve?

2 mensagens neste tópico

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

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. ;)

2007 by djthyrax @ PyTeam.

[Artigo no Wiki]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora