Jump to content
Sign in to follow this  
djthyrax

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

Recommended Posts

djthyrax

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]


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.