Saya hanya ingin mengatasi beberapa kebingungan terlebih dahulu. __file__
bukan wildcard itu adalah atribut. Atribut garis bawah ganda dan metode dianggap "istimewa" oleh konvensi dan melayani tujuan khusus.
http://docs.python.org/reference/datamodel.html menunjukkan banyak metode dan atribut khusus, jika tidak semuanya.
Dalam hal ini __file__
adalah atribut modul (objek modul). Dalam Python .py
file adalah modul. Jadi import amodule
akan memiliki atribut __file__
yang artinya berbeda dalam keadaan yang berbeda.
Diambil dari dokumen:
__file__
adalah pathname dari file dari mana modul dimuat, jika itu diambil dari file. The __file__
atribut tidak hadir untuk modul C yang statis terhubung ke penafsir; untuk modul ekstensi yang dimuat secara dinamis dari pustaka bersama, itu adalah nama path dari file pustaka bersama.
Dalam kasus Anda, modul mengaksesnya sendiri __file__
atributnya di namespace global.
Untuk melihat ini dalam aksi coba:
# file: test.py
print globals()
print __file__
Dan lari:
python test.py
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__':
'test_print__file__.py', '__doc__': None, '__package__': None}
test_print__file__.py
__file__
TIDAK didefinisikan dalam semua kasus, misalnya modul C yang terhubung secara statis. Kami tidak dapat mengandalkan__file__
selalu tersedia.