Một đối tượng mô-đun được đặc trưng bởi các thuộc tính khác nhau. Tên thuộc tính được đặt trước và sau cố định bằng dấu gạch dưới kép __. Thuộc tính quan trọng nhất của mô-đun là __name__. Khi Python đang chạy dưới dạng mã thực thi cấp cao nhất, tức là khi được đọc từ đầu vào chuẩn, tập lệnh hoặc từ lời nhắc tương tác, thuộc tính __name__ được đặt thành ' __main__ '.
>>> __name__ '__main__'
Cũng từ trong một tập lệnh, chúng tôi thấy một giá trị của thuộc tính __name__ được đặt thành '__main__'. Thực thi tập lệnh sau.
'module docstring' print ('name of module:',__name__)
Đầu ra
name of module: __main__
Tuy nhiên, đối với một mô-đun được nhập, thuộc tính này được đặt thành tên của tập lệnh Python. Đối với mô-đun hello.py
>>> import hello >>> hello.__name__ hello
Như đã thấy trước đó, giá trị của __name__ được đặt thành __main__ cho mô-đun cấp cao nhất. Tuy nhiên, đối với mô-đun đã nhập, nó được đặt thành tên của một tệp. Chạy tập lệnh sau (moduletest.py)
import hello print ('name of top level module:', __name__) print ('name of imported module:', hello.__name__)
Đầu ra
name of top level module: __main__ name of imported module: hello
Một tập lệnh Python chứa hàm cũng có thể có một mã thực thi nhất định. Do đó, nếu chúng tôi nhập nó, mã của nó sẽ được chạy tự động. Chúng tôi có tập lệnh này messages.py với hai chức năng. Trong phần thực thi, đầu vào của người dùng được cung cấp dưới dạng đối số cho hàm 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)
Rõ ràng là khi chúng tôi chạy messages.py đầu ra sẽ hiển thị thông báo cảm ơn như bên dưới.
enter name:Ajit Thank you Ajit. See you again
Chúng tôi có một tập lệnh moduletest.py như bên dưới.
import messages print ('name of top level module:', __name__) print ('name of imported module:', messages.__name__)
Bây giờ, nếu chúng tôi chạy tập lệnh moduletest.py, chúng tôi sẽ thấy rằng câu lệnh đầu vào và lệnh gọi chào mừng () sẽ được thực thi.
c:\python37>python moduletest.py
Đầu ra
enter name:Kishan Thank you Kishan. See you again enter name:milind Hi milind. Welcome to TutorialsPoint
Đây là đầu ra của cả hai tập lệnh. Nhưng muốn nhập chức năng từ mô-đun thông báo nhưng không phải mã thực thi trong đó.
Đây là nơi thực tế rằng giá trị của __name__ thuộc tính của tập lệnh cấp cao nhất là __main__ là hữu ích. Thay đổi tập lệnh messages.py để nó thực thi lệnh gọi hàm và đầu vào chỉ khi __name__ bằng __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)
Sử dụng kỹ thuật trên bất cứ khi nào bạn muốn một mô-đun có thể được thực thi cũng như được nhập. Moduletest.py không yêu cầu bất kỳ thay đổi nào. Một phần thực thi trong mô-đun thông báo sẽ không chạy ngay bây giờ.
enter name: milind Hi milind. Welcome to TutorialsPoint
Lưu ý rằng điều này không ngăn bạn chạy tập lệnh messages.py một cách độc lập.