Por que o valor de __name__ é alterado após a atribuição a sys.modules [__ name __]?
Enquanto tenta fazer algo semelhante ao que está na receita do ActiveState intitulado Constantes em Python por Alex Martelli, tive o efeito colateral inesperado (no Python 2.7) que atribui uma instância de classe a uma entrada emsys.modules
has - ou seja, isso aparentemente altera o valor de__name__
paraNone
conforme ilustrado no seguinte fragmento de código (que quebra parte do código na receita):
class _test(object): pass
import sys
print '# __name__: %r' % __name__
# __name__: '__main__'
sys.modules[__name__] = _test()
print '# __name,__: %r' % __name__
# __name__: None
if __name__ == '__main__': # never executes...
import test
print "done"
Eu gostaria de entender por que isso está acontecendo. Eu não acredito que fosse assim no Python 2.6 e versões anteriores, pois eu tenho algum código mais antigo, onde aparentemente oif __name__ == '__main__':
ondicional trabalhou como esperado após a atribuição (mas não funciona mais
FWIW, também notei que o nome_test
está sendo recuperado de um objeto de classe paraNone
também, após a atribuição. Parece estranho para mim que eles estão sendo recuperados paraNone
em vez de desaparecer completamente ...
Atualizar
Gostaria de acrescentar que quaisquer soluções alternativas para obter o efeito deif __name__ == '__main__':
, dado o que acontece seria muito apreciado. TIA!