Остальные ответы верны и точны. Позвольте мне остановиться на некоторых из ваших заблуждений.
Мое лучшее предположение состоит в том, что поскольку библиотека имеет файл "__init__.py
", весь модуль загружается как объект класса, и теперь он становится частью долговременного объекта ... это так?
Все пакеты имеют файл __init__.py
. Нужно сделать что-то пакет python. Этот пакет может содержать или не содержать код. Если это так, то гарантированно выполнится. В общем случае это не имеет никакого отношения к тому, как выполняются другие модули в пакете, хотя, безусловно, можно добавить много действительно классных хитростей, которые на него влияют.
Что касается того, как работают модули и классы, часто очень полезно думать о модуле как об объекте класса, экземпляр которого создается один раз. Загрузчик выполняет файлы один раз, и все переменные, определения классов и определения функций, доступные в конце файла, становятся доступными как часть модуля.
То же самое относится и к классам, за исключением того, что функции, объявленные внутри классов, преобразуются в методы (и один специальный метод позволяет создать экземпляр класса). Итак, testModule
имеет-101 * имеет-1015 *. Все три объекта уникальны: не будет нескольких экземпляров ни одного из них. И отношение has-a действительно более или менее одинаково, говорим ли мы «модуль имеет-объект класса» или «объект класса имеет-переменную класса». (Разница заключается в деталях реализации, которые вас не должны касаться.)