ฉันแค่ต้องการจะจัดการกับความสับสนก่อน __file__
ไม่ใช่อักขระตัวแทนซึ่งเป็นแอตทริบิวต์ คุณลักษณะและวิธีการขีดเส้นใต้คู่จะถือว่าเป็น "พิเศษ" โดยการประชุมและให้บริการวัตถุประสงค์พิเศษ
http://docs.python.org/reference/datamodel.htmlแสดงวิธีและคุณลักษณะพิเศษมากมายหากไม่ใช่ทั้งหมด
ในกรณี__file__
นี้เป็นคุณสมบัติของโมดูล (วัตถุโมดูล) ใน Python .py
ไฟล์เป็นโมดูล ดังนั้นimport amodule
จะมีคุณลักษณะ__file__
ที่หมายถึงสิ่งต่าง ๆ ภายใต้สถานการณ์ที่แตกต่างกัน
นำมาจากเอกสาร:
__file__
เป็นชื่อพา ธ ของไฟล์ที่โมดูลถูกโหลดถ้ามันถูกโหลดจากไฟล์ ไม่มี__file__
แอตทริบิวต์นี้สำหรับโมดูล C ที่เชื่อมโยงกับล่ามแบบคงที่ สำหรับโมดูลส่วนขยายที่โหลดแบบไดนามิกจากไลบรารีที่แชร์จะเป็นชื่อพา ธ ของไฟล์ไลบรารีที่แชร์
ในกรณีของคุณโมดูลกำลังเข้าถึงเป็น__file__
คุณสมบัติของตัวเองในเนมสเปซส่วนกลาง
หากต้องการดูสิ่งนี้ในการดำเนินการลอง:
# file: test.py
print globals()
print __file__
และเรียกใช้:
python test.py
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__':
'test_print__file__.py', '__doc__': None, '__package__': None}
test_print__file__.py
__file__
ไม่ได้กำหนดไว้ในทุกกรณีเช่นโมดูล C ที่เชื่อมโยงแบบคงที่ เราไม่สามารถไว้วางใจได้__file__
เสมอ