Что такое импорт в Python?

Содержание

  1. Что такое импорт
  2. Как Python использует модуль
  3. Основные варианты импорта
  4. Импорт собственного класса
  5. Зачем разбивать код на модули
  6. Пакеты
  7. Практика

Что такое импорт

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

Пример:

import math
 
print(math.sqrt(25))

Здесь import math подключает модуль math, а math.sqrt(25) вызывает функцию квадратного корня из этого модуля.

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


Как Python использует модуль

Когда Python встречает import, он:

  1. ищет указанный модуль;
  2. загружает его содержимое;
  3. делает функции, классы и переменные доступными в текущем файле;
  4. позволяет обращаться к ним через имя модуля или напрямую, в зависимости от способа импорта.

Модуль - это обычный .py файл. Например, файл calculator.py уже может быть модулем.


Основные варианты импорта

Импорт всего модуля

import math
 
print(math.pi)
print(math.sqrt(36))

Плюс: видно, откуда пришла функция. Минус: нужно каждый раз писать имя модуля.

Импорт конкретных объектов

from math import sqrt, pi
 
print(sqrt(49))
print(pi)

Плюс: короче запись. Минус: если импортов много, сложнее понять источник имени.

Импорт с псевдонимом

import math as m
 
print(m.sqrt(81))

Псевдонимы часто используют для длинных названий библиотек.

Импорт всего содержимого

from math import *
 
print(sqrt(64))

Такой вариант лучше избегать. Он засоряет пространство имен: становится непонятно, откуда пришли функции, и можно случайно перекрыть уже существующие имена.


Импорт собственного класса

Классы мы научились писать в 03.04 - ООП Классы — теперь научимся переиспользовать их между файлами.

Представим, что есть файл my_module.py.

# Файл: my_module.py
 
class Calculator:
    def add(self, a, b):
        return a + b
 
    def multiply(self, a, b):
        return a * b

Теперь этот класс можно использовать в другом файле.

# Файл: main.py
 
from my_module import Calculator
 
calc = Calculator()
print(calc.add(4, 7))
print(calc.multiply(3, 5))

Такой подход помогает держать код организованным: класс находится в одном файле, а использование - в другом.


Зачем разбивать код на модули

Импорт помогает:

  • переиспользовать уже написанный код;
  • разделять большую программу на понятные части;
  • хранить классы и функции в отдельных файлах;
  • быстрее находить нужную логику;
  • подключать встроенные и сторонние библиотеки.

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


Пакеты

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

Пример структуры:

my_project/
├── main.py
└── shop_package/
    ├── __init__.py
    ├── store.py
    └── tools.py
  • main.py - основной файл программы;
  • shop_package - пакет;
  • store.py и tools.py - модули внутри пакета;
  • __init__.py может быть пустым или содержать код инициализации.

Импорт модуля из пакета

from shop_package import store
 
store.show_catalog()

Импорт конкретного класса или функции

from shop_package.store import SupplyStore
 
store = SupplyStore()

Импорт из нескольких модулей

from shop_package.store import SupplyStore
from shop_package.tools import format_price, check_stock

Пример пакета с магазином инструментов

Шаг 1: структура проекта

workshop_project/
├── main.py
└── workshop_store/
    ├── __init__.py
    ├── store.py
    └── helpers.py

Шаг 2: модуль store.py

class WorkshopStore:
    def __init__(self):
        self.items = {
            "Отвертка": 250,
            "Набор ключей": 1200,
            "Измерительная рулетка": 450,
        }
 
    def show_items(self):
        print("Каталог магазина:")
        for item, price in self.items.items():
            print(f"{item}: {price} руб.")
 
    def buy_item(self, item_name):
        if item_name in self.items:
            print(f"Вы купили {item_name} за {self.items[item_name]} руб.")
        else:
            print("Такого товара нет в каталоге")

Шаг 3: модуль helpers.py

def format_price(price):
    return f"{price} руб."
 
def check_budget(price, budget):
    if budget >= price:
        print("Бюджета хватает")
    else:
        print("Бюджета недостаточно")

Шаг 4: файл __init__.py

from .store import WorkshopStore
from .helpers import format_price, check_budget

После этого можно импортировать нужные объекты прямо из пакета.

Шаг 5: использование в main.py

from workshop_store import WorkshopStore, check_budget
 
store = WorkshopStore()
store.show_items()
store.buy_item("Набор ключей")
store.buy_item("Паяльная станция")
 
check_budget(1200, 1500)
check_budget(450, 300)

Практика

  • Задание 1: импорт собственного класса

    Создайте файл academy_store.py с классом AcademyStore.

    # Файл: academy_store.py
     
    class AcademyStore:
        def __init__(self):
            self.items = {
                "Тетрадь": 120,
                "Маркер": 90,
                "Планер": 350,
            }
     
        def show_items(self):
            for item, price in self.items.items():
                print(f"{item}: {price} руб.")
     
        def buy_item(self, item_name):
            if item_name in self.items:
                print(f"Куплено: {item_name}")
            else:
                print("Товар не найден")

    Создайте main.py и импортируйте класс.

    from academy_store import AcademyStore
     
    store = AcademyStore()
    store.show_items()
    store.buy_item("Маркер")
    store.buy_item("Рюкзак")
  • Задание 2: несколько функций в модуле

    Создайте файл text_tools.py с функциями:

    • count_letters(text) - возвращает длину строки;
    • to_upper(text) - возвращает строку в верхнем регистре;
    • has_word(text, word) - проверяет, есть ли слово в тексте.

    В main.py импортируйте только две функции и проверьте их на своих значениях.

  • Задание 3: пакет

    Создайте пакет finance_tools со структурой:

    finance_tools/
    ├── __init__.py
    ├── taxes.py
    └── currency.py
    

    В taxes.py создайте функцию add_tax(price, rate). В currency.py - функцию rub_to_usd(amount, rate).

    В __init__.py импортируйте обе функции, а затем используйте их в main.py.


Короткий итог

Импорт подключает код из других файлов и библиотек. Модуль - это .py файл, пакет - папка с модулями. В небольших программах импорт помогает не повторяться, а в больших проектах делает структуру понятной: классы, функции и вспомогательные инструменты можно хранить там, где им логически место.


⬅️ Назад: 03.06 - Методы классов | Далее: 03.08 - Подготовка к Экзамену ООП ➡️ Модуль: 03 - MOC