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!

questionAnswers(2)

yourAnswerToTheQuestion