В чем разница между классом и модулем в Python?

Ответ

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

Класс (Class)

Класс — это шаблон или чертеж для создания объектов (экземпляров). Он определяет структуру данных (атрибуты) и поведение (методы), которые будут присущи всем объектам, созданным на его основе. Классы являются основой объектно-ориентированного программирования (ООП) и поддерживают такие принципы, как инкапсуляция, наследование и полиморфизм.

Пример класса:

class Car:
    def __init__(self, make, model):
        self.make = make
        self.model = model
        self.speed = 0

    def accelerate(self, amount):
        self.speed += amount
        print(f"{self.make} {self.model} ускоряется до {self.speed} км/ч.")

    def get_info(self):
        return f"Автомобиль: {self.make} {self.model}, текущая скорость: {self.speed} км/ч."

# Создание объектов (экземпляров) класса Car
my_car = Car("Toyota", "Camry")
my_car.accelerate(60)
print(my_car.get_info())

Модуль (Module)

Модуль — это обычный файл Python (.py), который содержит определения функций, классов, переменных и исполняемый код. Модули используются для логического группирования связанного кода и обеспечения его повторного использования. Каждый модуль имеет свое собственное пространство имен, что помогает избежать конфликтов имен.

Пример модуля (my_utils.py):

# my_utils.py

def greet(name):
    return f"Привет, {name}!"

class Logger:
    def __init__(self, prefix):
        self.prefix = prefix

    def log(self, message):
        print(f"[{self.prefix}] {message}")

VERSION = "1.0"

Использование модуля в другом файле:

# main.py
import my_utils

print(my_utils.greet("Алиса"))

logger = my_utils.Logger("APP")
logger.log("Запуск приложения.")

print(f"Версия утилит: {my_utils.VERSION}")

Ключевые отличия:

  • Назначение: Класс — это шаблон для создания объектов, инкапсулирующий данные и поведение. Модуль — это контейнер для организации и повторного использования кода (функций, классов, переменных) в виде файла.
  • Экземпляры: Классы инстанцируются для создания множества объектов, каждый со своим состоянием. Модули импортируются один раз за сессию и предоставляют единое пространство имен.
  • Состояние: Объекты класса имеют собственное состояние (атрибуты). Модули могут иметь глобальные переменные, но их основная цель — организация кода, а не управление состоянием отдельных сущностей.
  • Принципы ООП: Классы являются центральным элементом ООП, поддерживая наследование, полиморфизм и инкапсуляцию. Модули не поддерживают эти принципы напрямую, но могут содержать классы, которые их используют.
  • Иерархия: Модули могут содержать несколько классов, функций и переменных. Классы содержат атрибуты и методы.