В этом уроке вы узнаете, что такое модуль Python, и поймете, как он работает.
Что такое модуль Python?
Модуль в Python — это файл, содержащий код Python. Фактически все в Python является объектом, включая модуль.
Когда вы импортируете модуль с помощью оператора import, Python создает новый объект модуля. Например, следующий код импортирует встроенный математический модуль:
import math
Python создает новую переменную с именем math, которая ссылается на объект модуля:
import math print(math)
Math — это переменная, которая ссылается на объект модуля:
<module 'math'(built-in)>
Имя модуля — math. Тип математического модуля — модуль класса:
<class 'module'>
Если вы посмотрите на globals(), вы увидите переменную math в глобальном пространстве имен:
import math from pprint import pprint pprint(globals())
Выход:
{'__annotations__': {},
'__builtins__': <module 'builtins'(built-in)>,
'__doc__': None,
'__loader__': <class '_frozen_importlib.BuiltinImporter'>,
'__name__': '__main__',
'__package__': None,
'__spec__': None,
'math': <module 'math'(built-in)>,
'pprint': <function pprint at 0x0000023FE66491F0>}
Поскольку math — это объект, вы можете получить доступ к его атрибутам. Например, вы можете получить имя математического объекта, используя атрибут __name__:
import math print(math.__name__)
Выход:
math
И вы можете получить доступ ко всем атрибутам объекта math через __dict__:
import math from pprint import pprint pprint(math.__dict__)
Выход:
'__doc__': 'This module provides access to the mathematical functions\n'
'defined by the C standard.',
'__loader__': <class '_frozen_importlib.BuiltinImporter'>,
'__name__': 'math',
'__package__': '',
'__spec__': ModuleSpec(name="math", loader=<class '_frozen_importlib.BuiltinImporter'>, origin='built-in'),
'acos': <built-in function acos>,
...
И вы можете использовать math как обычную переменную. Например, вы можете установить значение None:
math = None
Это указывает Python уничтожить объект модуля, на который ссылается математическая переменная math.
math является экземпляром ModuleType:
import math from types import ModuleType pprint(isinstance(math,ModuleType))
Выход:
True
Математический модуль math является встроенным модулем. Давайте рассмотрим невстроенный модуль.
Невстроенный модуль
Модуль abc позволяет определять абстрактные базовые классы. Это не встроенный модуль:
import abc print(abc)
Выход:
<module 'abc' from 'C:\\Python\\lib\\abc.py'>
Модуль abc определен в файле lib\abc.py в папке установки Python в отличие от математического модуля, который является встроенным модулем.
Тип abc также является модулем:
import abc print(type(abc))
Выход:
<class 'module'>
Как и математический модуль, abc является экземпляром ModuleType, как показано в следующем примере:
import abc from types import ModuleType pprint(isinstance(abc,ModuleType))
Выход:
True
