Đối với các hàm toàn cục dir()
là lệnh sử dụng (như được đề cập trong hầu hết các câu trả lời này), tuy nhiên, điều này liệt kê cả các chức năng công cộng và chức năng ngoài công cộng cùng nhau.
Ví dụ: chạy:
>>> import re
>>> dir(re)
Trả về các hàm / lớp như:
'__all__', '_MAXCACHE', '_alphanum_bytes', '_alphanum_str', '_pattern_type', '_pickle', '_subx'
Một số trong đó thường không có nghĩa là để sử dụng lập trình chung (nhưng bởi chính mô-đun, ngoại trừ trong trường hợp của DunderAliases như __doc__
, __file__
ect). Vì lý do này, có thể không hữu ích khi liệt kê chúng với những người công khai (đây là cách Python biết những gì sẽ nhận được khi sử dụng from module import *
).
__all__
có thể được sử dụng để giải quyết vấn đề này, nó trả về một danh sách tất cả các hàm và lớp công khai trong một mô-đun (những hàm không bắt đầu bằng dấu gạch dưới - _
). Xem
ai đó có thể giải thích __all__ bằng Python không? cho việc sử dụng __all__
.
Đây là một ví dụ:
>>> import re
>>> re.__all__
['match', 'fullmatch', 'search', 'sub', 'subn', 'split', 'findall', 'finditer', 'compile', 'purge', 'template', 'escape', 'error', 'A', 'I', 'L', 'M', 'S', 'X', 'U', 'ASCII', 'IGNORECASE', 'LOCALE', 'MULTILINE', 'DOTALL', 'VERBOSE', 'UNICODE']
>>>
Tất cả các hàm và lớp có dấu gạch dưới đã bị xóa, chỉ còn lại các hàm được định nghĩa là công khai và do đó có thể được sử dụng thông qua import *
.
Lưu ý rằng __all__
không phải lúc nào cũng được xác định. Nếu nó không được bao gồm thì một AttributeError
được nâng lên.
Một trường hợp này là với mô-đun ast:
>>> import ast
>>> ast.__all__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'ast' has no attribute '__all__'
>>>