Для обратного преобразования используйте binascii.b2a_hex (obj)
Это - список общедоступных объектов того модуля, как интерпретируется import *
. Это переопределяет значение по умолчанию сокрытия всего, что начинается с подчеркивания.
Связанный с, но не явно упомянутый здесь, точно, когда __all__
используется. Это - список строкового определения, какие символы в модуле будут экспортироваться, когда from <module> import *
будет использоваться на модуле.
, Например, следующий код в foo.py
явно экспорт символы bar
и baz
:
__all__ = ['bar', 'baz']
waz = 5
bar = 10
def baz(): return 'baz'
Эти символы могут тогда быть импортированы как так:
from foo import *
print(bar)
print(baz)
# The following will trigger an exception, as "waz" is not exported by the module
print(waz)
, Если __all__
выше комментируется, этот код тогда выполнится к завершению, поскольку поведение по умолчанию import *
состоит в том, чтобы импортировать все символы, которые не начинаются с подчеркивания от данного пространства имен.
Ссылка: https://ПРИМЕЧАНИЕ docs.python.org/tutorial/modules.html#importing-from-a-package
: __all__
влияние from <module> import *
поведение только. Участники, которые не упоминаются в [1 111], все еще доступны снаружи модуля и могут быть импортированы с [1 112].
От (Неофициальное) Ссылочный Wiki Python:
общедоступные имена, определенные модулем, определяются путем проверки пространства имен модуля на переменную, названную
__all__
; если определено, это должна быть последовательность строк, которые являются именами, определенными или импортированными тем модулем. Имена, данные в__all__
, все считаются общедоступными и требуются, чтобы существовать. Если__all__
не определяется, набор общедоступных имен включает все имена, найденные в пространство имен модуля, которые не начинаются с символа подчеркивания (" _ ").__all__
должен содержать весь общедоступный API. Это предназначается, чтобы не случайно экспортировать объекты, которые не являются частью API (такого как модули библиотеки, которые импортировались и использовались в модуле).
Это также изменяет то, что покажет pydoc:
module1.py
a = "A"
b = "B"
c = "C"
module2.py
__all__ = ['a', 'b']
a = "A"
b = "B"
c = "C"
$ pydoc module1
Help on module module1: NAME module1 FILE module1.py DATA a = 'A' b = 'B' c = 'C'
$ pydoc module2
Help on module module2: NAME module2 FILE module2.py DATA __all__ = ['a', 'b'] a = 'A' b = 'B'
Я объявляю __all__
во всех своих модулях, а также подчеркиваю внутренние детали, это действительно помогает при использовании вещей, которые вы никогда не использовали раньше в живых сессиях интерпретатора.