Solo quiero abordar algo de confusión primero. __file__
no es un comodín, es un atributo. Los atributos y métodos de doble subrayado se consideran "especiales" por convención y tienen un propósito especial.
http://docs.python.org/reference/datamodel.html muestra muchos de los métodos y atributos especiales, si no en todos.
En este caso __file__
es un atributo de un módulo (un objeto de módulo). En Python, un archivo .py
es un módulo. Entonces import amodule
tendrá un atributo de __file__
que significa cosas diferentes en circunstancias diferentes.
tomadas de los documentos:
__file__
es la ruta del archivo desde el que se carga el módulo, si se carga desde un archivo. El atributo __file__
no está presente en para los módulos C que están vinculados estáticamente en el intérprete; para módulos de extensión cargados dinámicamente desde una biblioteca compartida, es el nombre de ruta del archivo de biblioteca compartida.
En su caso, el módulo está accediendo a su propio atributo __file__
en el espacio de nombres global.
Para ver esto en acción Tratar:
# file: test.py
print globals()
print __file__
y ejecute:
python test.py
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__':
'test_print__file__.py', '__doc__': None, '__package__': None}
test_print__file__.py
Obviamente, no es un comodín. – tripleee
Es una variable "mágica"; comodín significa algo completamente diferente. –