#python #python-2.7
#python #python-2.7
Вопрос:
Когда я сделал каталог, чтобы найти список методов в boltons, я получил следующий результат
>>> import boltons
>>> dir(boltons)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
Когда я явно сделал
>>> from boltons.strutils import camel2under
>>> dir(boltons)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'strutils']
обнаружено, что strutils добавляются к атрибуту boltons
Почему strutils не отображается перед явным импортом?
Ответ №1:
Из документации о том, что делает dir:
С помощью аргумента попытайтесь вернуть список допустимых атрибутов для этого объекта.
Когда мы импортируем пакет boltons, мы видим, что strutils не является атрибутом объекта boltons. Поэтому мы не ожидаем, что она появится в dir(boltons)
.
>>>import boltons
>>>getattr(boltons, 'strutils')
AttributeError: module 'boltons' has no attribute 'strutils'
В документах по импорту подмодулей говорится:
Например, если пакет spam имеет подмодуль foo, после импорта spam.foo у spam будет атрибут foo, который привязан к подмодулю.
Импорт подмодуля создает атрибут в пакете. В вашем примере:
>>>import boltons
>>>getattr(boltons, 'strutils')
AttributeError: module 'boltons' has no attribute 'strutils'
>>>from boltons.strutils import camel2under
>>>getattr(boltons, 'strutils')
<module 'boltons.strutils' from '/usr/local/lib/python3.5/site-packages/boltons/strutils.py'>
Поэтому в этом случае мы ожидаем, что strutils будут отображаться в dir(boltons)