Module (59%)
Section (64%)

Ваш первый пакет: шаг 3

Так выглядит древовидная структура:

The relationship between modules - tree structure

Такая структура почти является пакетом (в смысле Python). Ему не хватает мелких деталей, чтобы быть функциональным и рабочим. Сейчас мы его закончим.

Если Вы предполагаете, что extra - это имя недавно созданного пакета (его следует рассматривать как корень пакета), он наложит правило именования, которое позволит Вам понятно назвать каждый объект в дереве.




Например:

  • расположение функции с именем funT() из пакета tau можно описать так:

    extra.good.best.tau.funT()
  • функция помеченая как:

    extra.ugly.psi.funP()
    идет из модуля psi, который хранится в подпакете ugly пакета extra.

Ваш первый пакет: шаг 4

Есть два вопроса, на которые нужно ответить:

  • как преобразовать такое дерево (фактически, поддерево) в реальный пакет Python (другими словами, как убедить Python, что такое дерево - это не просто набор файлов, а набор модулей)?
  • куда поместить поддерево, чтобы сделать его доступным для Python?
 

На первый вопрос есть неожиданный ответ: пакеты, как и модули, могут требовать инициализации.

Инициализация модуля выполняется с помощью несвязанного кода (не являющегося частью какой-либо функции), расположенного внутри файла модуля. Поскольку пакет не является файлом, этот метод бесполезен для инициализации пакетов.

Вместо этого Вам нужно использовать другой прием - Python ожидает, что в папке пакета есть файл с очень уникальным именем: __init__.py.

 

Содержимое файла выполняется при импорте любого из модулей пакета. Если Вы не хотите никаких особых инициализаций, Вы можете оставить файл пустым, но Вы не должны его пропускать.