Атрибути модуля, пов’язані з імпортом
Оновлено: 28.04.2023
Механізм імпорту заповнює ці атрибути кожного об’єкта модуля під час завантаження на основі специфікації модуля, перш ніж завантажувач виконає модуль.
__name__ The __name__ attribute must be set to the fully qualified name of the module. This name is used to uniquely identify the module in the import system.
__loader__ Атрибут __loader__ повинен бути встановлений на об’єкт завантажувача, який імпорт використовував під час завантаження модуля. Це здебільшого для самоаналізу, але може використовуватися для додаткових функцій завантажувача, наприклад для отримання даних, пов’язаних із завантажувачем.
__package__ Необхідно встановити атрибут __package__ модуля. Його значення має бути рядком, але воно може збігатися з його __name__. Якщо модуль є пакетом, його значення __package__ має бути встановлено на його __name__. Якщо модуль не є пакетом, для __package__ має бути встановлено порожній рядок для модулів верхнього рівня або для підмодулів — ім’я батьківського пакета. Додаткові відомості див. PEP 366. Цей атрибут використовується замість __name__ для обчислення явного відносного імпорту для основних модулів, як визначено в PEP 366. Очікується, що він матиме те саме значення, що й __spec__.parent. Змінено в версії 3.6: Очікується, що значення __package__ буде таким самим, як __spec__.parent.
__spec__ Атрибут __spec__ має бути встановлений на специфікацію модуля, яка використовувалася під час імпорту модуля. Налаштування __spec__ належним чином застосовується до модулів, ініціалізованих під час запуску інтерпретатора. Єдиним винятком є __main__, де __spec__ встановлено на None у деяких випадках. Якщо __package__ не визначено, __spec__.parent використовується як запасний варіант. Нове в версії 3.4. Змінено в версії 3.6: __spec__.parent використовується як запасний варіант, коли __package__ не визначено.
__path__ Якщо модуль є пакетом (звичайним або простором імен), необхідно встановити атрибут __path__ об’єкта модуля. Значення має бути повторюваним, але може бути порожнім, якщо __path__ не має подальшого значення. Якщо __path__ не порожній, він повинен створювати рядки під час повторення. Детальніше про семантику __path__ наведено нижче. Непакетні модулі не повинні мати атрибут __path__.
__file__
__cached__ __file__ is optional (if set, value must be a string). It indicates the pathname of the file from which the module was loaded (if loaded from a file), or the pathname of the shared library file for extension modules loaded dynamically from a shared library. It might be missing for certain types of modules, such as C modules that are statically linked into the interpreter, and the import system may opt to leave it unset if it has no semantic meaning (e.g. a module loaded from a database). If __file__ is set then the __cached__ attribute might also be set, which is the path to any compiled version of the code (e.g. byte-compiled file). The file does not need to exist to set this attribute; the path can simply point to where the compiled file would exist (see PEP 3147). Note that __cached__ may be set even if __file__ is not set. However, that scenario is quite atypical. Ultimately, the loader is what makes use of the module spec provided by the finder (from which __file__ and __cached__ are derived). So if a loader can load from a cached module but otherwise does not load from a file, that atypical scenario may be appropriate.