โมดูลอ็อบเจ็กต์มีลักษณะเฉพาะด้วยคุณลักษณะต่างๆ ชื่อแอตทริบิวต์นำหน้าและหลังแก้ไขด้วยเครื่องหมายขีดล่างคู่ __ คุณลักษณะที่สำคัญที่สุดของโมดูลคือ __name__ เมื่อ Python ทำงานเป็นโค้ดสั่งการระดับบนสุด เช่น เมื่ออ่านจากอินพุตมาตรฐาน สคริปต์ หรือจากข้อความโต้ตอบแบบโต้ตอบ แอตทริบิวต์ __name__ จะถูกตั้งค่าเป็น '__main__ '.
>>> __name__ '__main__'
จากภายในสคริปต์ด้วย เราพบว่าค่าของแอตทริบิวต์ __name__ ถูกตั้งค่าเป็น '__main__' รันสคริปต์ต่อไปนี้
'module docstring' print ('name of module:',__name__)
ผลผลิต
name of module: __main__
อย่างไรก็ตาม สำหรับโมดูลที่นำเข้า คุณลักษณะนี้ถูกกำหนดเป็นชื่อของสคริปต์ Python สำหรับโมดูล hello.py
>>> import hello >>> hello.__name__ hello
ตามที่เห็นก่อนหน้านี้ ค่าของ __name__ ถูกตั้งค่าเป็น __main__ สำหรับโมดูลระดับบนสุด อย่างไรก็ตาม สำหรับโมดูลที่นำเข้า จะถูกตั้งค่าเป็นชื่อของไฟล์ เรียกใช้สคริปต์ต่อไปนี้ (moduletest.py)
import hello print ('name of top level module:', __name__) print ('name of imported module:', hello.__name__)
ผลผลิต
name of top level module: __main__ name of imported module: hello
สคริปต์ Python ที่มีฟังก์ชันอาจมีโค้ดสั่งการบางอย่าง ดังนั้นหากเรานำเข้ารหัสนั้นจะถูกเรียกใช้โดยอัตโนมัติ เรามีสคริปต์นี้ message.py ที่มีสองฟังก์ชัน ในการป้อนข้อมูลของผู้ใช้ส่วนที่ปฏิบัติการได้จัดเตรียมไว้เป็นอาร์กิวเมนต์ของฟังก์ชัน thanks()
def welcome(name): print ("Hi {}. Welcome to TutorialsPoint".format(name)) return def thanks(name): print ("Thank you {}. See you again".format(name)) name = input('enter name:') thanks(name)
เห็นได้ชัดว่าเมื่อเราเรียกใช้เอาต์พุตของ message.py จะแสดงข้อความขอบคุณดังนี้
enter name:Ajit Thank you Ajit. See you again
เรามีสคริปต์ moduletest.py ดังนี้
import messages print ('name of top level module:', __name__) print ('name of imported module:', messages.__name__)
ตอนนี้ หากเราเรียกใช้สคริปต์ moduletest.py เราจะพบว่าคำสั่งอินพุตและการเรียก to welcome() จะถูกดำเนินการ
c:\python37>python moduletest.py
ผลผลิต
enter name:Kishan Thank you Kishan. See you again enter name:milind Hi milind. Welcome to TutorialsPoint
นี่คือผลลัพธ์ของทั้งสองสคริปต์ แต่ต้องการนำเข้าฟังก์ชันจากโมดูลข้อความ แต่ไม่ใช่โค้ดสั่งการในนั้น
นี่คือความจริงที่ว่าค่าของ __name__attribute ของสคริปต์ระดับบนสุดคือ __main__ มีประโยชน์ เปลี่ยนสคริปต์ message.py เพื่อให้รันคำสั่งอินพุตและฟังก์ชันเรียกใช้เฉพาะเมื่อ __name__ เท่ากับ __main__
"docstring of messages module" def welcome(name): print ("Hi {}. Welcome to TutorialsPoint".format(name)) return def thanks(name): print ("Thank you {}. See you again".format(name)) if __name__=='__main__': name = input('enter name') thanks(name)
ใช้เทคนิคข้างต้นเมื่อใดก็ตามที่คุณต้องการโมดูลที่สามารถดำเนินการได้เช่นเดียวกับการนำเข้า moduletest.py ไม่ต้องการการเปลี่ยนแปลงใดๆ ส่วนปฏิบัติการในโมดูลข้อความจะไม่ทำงานในขณะนี้
enter name: milind Hi milind. Welcome to TutorialsPoint
โปรดทราบว่าการดำเนินการนี้ไม่ได้ป้องกันคุณจากการเรียกใช้สคริปต์ message.py อย่างอิสระ