2.1 Знакомство с пакетами
Пакеты — это способ структурирования модулей в директории. Пакет — это директория, содержащая файл __init__.py и один или несколько модулей. Файл __init__.py может быть пустым или содержать код инициализации пакета.
Пример структуры пакета/директории
mypackage/
__init__.py
module1.py
module2.py
Содержимое файла __init__.py |
|---|
|
Содержимое файла module1.py |
|---|
|
Содержимое файла module2.py |
|---|
|
Пример кода, который использует функции данного пакета:
import mypackage
print(mypackage.func1()) # Вывод: Function 1
print(mypackage.func2()) # Вывод: Function 2
Давайте ниже попробуем написать свой собственный пакет, заодно и разберемся, как работают чужие.
2.2 Создаем свой пакет пошагово
Шаг 1: Создание структуры пакета
Первым шагом является создание структуры каталогов и файлов для вашего пакета. В качестве примера мы создадим пакет под названием mypackage, содержащий два модуля: module1.py и module2.py.
Пример структуры пакета:
mypackage/
__init__.py
module1.py
module2.py
Описание файлов:
-
__init__.py: Этот файл может быть пустым или содержать код инициализации пакета. Он нужен для того, чтобы Python рассматривал каталог как пакет. -
module1.pyиmodule2.py: Эти файлы содержат функции, классы и переменные, которые вы хотите включить в свой пакет.
Шаг 2: Написание кода для модулей
Напишем простой код для наших модулей.
module1.py
def func1():
return "Function 1 from module1"
module2.py
def func2():
return "Function 2 from module2"
__init__.py
Чтобы импортировать функции из наших модулей на уровень пакета, добавим их в __init__.py.
from .module1 import func1
from .module2 import func2
Теперь, когда вы импортируете пакет, функции func1 и func2 будут доступны напрямую.
Шаг 3: Тестирование пакета
Создайте файл test.py в том же каталоге, где находится каталог mypackage, и используйте пакет в этом файле для тестирования.
test.py
import mypackage
print(mypackage.func1()) # Вывод: Function 1 from module1
print(mypackage.func2()) # Вывод: Function 2 from module2
Запустите test.py, чтобы убедиться, что ваш пакет работает правильно.
2.3 Использование функции dir()
Когда вы импортируете модуль или пакет, вы можете использовать функцию dir() для получения списка всех доступных атрибутов и методов в этом модуле. Это особенно полезно, если вы работаете с новым или незнакомым модулем и хотите быстро узнать, какие функции и классы он предоставляет.
Пример: Исследование стандартного модуля math
Рассмотрим пример использования dir() для исследования стандартного модуля math.
import math
print(dir(math))
Этот код импортирует модуль math и выводит список всех доступных атрибутов и методов. Результат будет выглядеть примерно так:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1',
'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf',
'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod',
'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
Этот список включает все функции и константы, определенные в модуле math, такие как sin, cos, tan, pi и другие.
Использование dir() для пользовательских модулей
Вы также можете использовать dir() для пользовательских (своих) модулей. Допустим, у вас есть файл mymodule.py со следующим содержимым:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Вы можете импортировать этот модуль и использовать dir() для исследования его содержимого:
import mymodule
print(dir(mymodule))
Результат будет следующим:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__',
'greet', 'pi']
Список включает 8 служебных атрибутов (обрамлены подчеркиванием) модуля mymodule, и в конце идут ваш метод greet и переменная pi.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ