¿Por qué cambia el valor de __name__ después de la asignación a sys.modules [__ name __]?
Mientras intenta hacer algo similar a lo que hay en la receta de ActiveState tituladaConstantes en Python by Alex Martelli, me encontré con el inesperado efecto secundario (en Python 2.7) que asignaba una instancia de clase a una entrada ensys.modules
tiene, es decir, que al hacerlo aparentemente cambia el valor de__name__
aNone
como se ilustra en el siguiente fragmento de código (que rompe parte del código en la receta):
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"
Me gustaría entender por qué sucede esto. No creo que fuera así en Python 2.6 y versiones anteriores ya que tengo un código más antiguo donde aparentemente elif __name__ == '__main__':
condicional funcionó como se esperaba después de la asignación (pero ya no lo hace).
FWIW, también noté que el nombre_test
se está recuperando de un objeto de clase aNone
, también, después de la asignación. Me parece extraño que se estén recuperando aNone
en lugar de desaparecer por completo ...
Actualizar
Me gustaría agregar que cualquier solución para lograr el efecto deif __name__ == '__main__':
, dado lo que sucede sería muy apreciado. TIA!