Önce biraz kafa karışıklığına değinmek istiyorum. __file__bir joker karakter değil, bir özelliktir. Çift alt çizgi öznitelikleri ve yöntemleri, sözleşmeyle "özel" kabul edilir ve özel bir amaca hizmet eder.
http://docs.python.org/reference/datamodel.html hepsi olmasa da birçok özel yöntem ve özelliği gösterir.
Bu durumda __file__bir modülün (modül nesnesi) bir özelliğidir. Python'da bir .pydosya bir modüldür. Bu nedenle import amodule, __file__farklı koşullar altında farklı şeyler anlamına gelen bir niteliğe sahip olacaktır .
Dokümanlardan alınmıştır:
__file__bir dosyadan yüklenmişse, modülün yüklendiği dosyanın yol adıdır. __file__Nitelik statik tercüman içine bağlandıkları C modülleri için mevcut değildir; paylaşılan bir kitaplıktan dinamik olarak yüklenen uzantı modülleri için, paylaşılan kitaplık dosyasının yol adıdır.
Sizin durumunuzda modül, __file__global ad alanında kendi özelliğine erişiyor .
Bunu çalışırken görmek için şunu deneyin:
# file: test.py
print globals()
print __file__
Ve koş:
python test.py
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__':
'test_print__file__.py', '__doc__': None, '__package__': None}
test_print__file__.py
__file__her durumda tanımlanmamıştır, örneğin statik olarak bağlı C modülleri. Her__file__zaman müsait olmaya güvenemeyiz .