W przypadku funkcji globalnych dir()
należy użyć polecenia (jak wspomniano w większości tych odpowiedzi), jednak zawiera ono zarówno funkcje publiczne, jak i funkcje niepubliczne.
Na przykład bieganie:
>>> import re
>>> dir(re)
Zwraca funkcje / klasy, takie jak:
'__all__', '_MAXCACHE', '_alphanum_bytes', '_alphanum_str', '_pattern_type', '_pickle', '_subx'
Niektóre z nich zasadniczo nie są przeznaczone do ogólnego użytku w programowaniu (ale przez sam moduł, z wyjątkiem DunderAliases, takich jak __doc__
, __file__
ect). Z tego powodu może być nieprzydatne, aby wymienić je na publiczne (w ten sposób Python wie, co uzyskać, używając from module import *
).
__all__
może być użyty do rozwiązania tego problemu, zwraca listę wszystkich funkcji publicznych i klas w module (tych, które nie zaczynają się od podkreślenia - _
). Zobacz
Czy ktoś może wyjaśnić __all__ w Pythonie? do użytku __all__
.
Oto przykład:
>>> 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']
>>>
Wszystkie funkcje i klasy ze znakami podkreślenia zostały usunięte, pozostawiając tylko te, które są zdefiniowane jako publiczne i dlatego mogą być używane przez import *
.
Pamiętaj, że __all__
nie zawsze jest zdefiniowane. Jeśli nie jest uwzględniony, to AttributeError
jest podnoszony.
Przykładem może być moduł ast:
>>> import ast
>>> ast.__all__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'ast' has no attribute '__all__'
>>>