← Назад к вопросам
Что такое куча (Heap) в Python?
2.0 Middle🔥 81 комментариев
#Python Core#Soft Skills
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое контракт при взаимодействии модулей в Python
Контракт (Contract) — это явное соглашение между модулями о том, какие функции один модуль предоставляет другому, какие параметры принимает и что возвращает. Это гарантирует предсказуемое взаимодействие.
Основная идея
# Модуль A — контракт: функция принимает список и возвращает число
def sum_numbers(numbers: list[int]) -> int:
'''Суммирует все числа в списке.
Args:
numbers: Список целых чисел
Returns:
Сумма всех чисел
'''
return sum(numbers)
# Модуль B — использует контракт
result = sum_numbers([1, 2, 3]) # Знаем, что получим число обратно
Типизация как контракт
from typing import List, Dict, Optional
def get_user_by_id(user_id: int) -> Optional[Dict[str, str]]:
'''Контракт: принимает int, возвращает Dict или None'''
# реализация...
def process_orders(orders: List[Dict]) -> int:
'''Контракт: принимает список диктов, возвращает int'''
# реализация...
Документирование контракта
class UserRepository:
def save(self, user: User) -> User:
'''Сохраняет пользователя.
Args:
user: Объект User без ID
Returns:
User с установленным ID из БД
Raises:
ValidationError: Если user некорректен
DatabaseError: Если ошибка БД
'''
# реализация...
Нарушение контракта
# Плохо — функция нарушает контракт
def calculate_total(prices: list[float]) -> float:
'''Контракт: возвращает число'''
# Но может вернуть None!
if not prices:
return None
return sum(prices)
# Вызывающий код сломается
total = calculate_total([])
print(total + 10) # TypeError: unsupported operand type(s)
Интерфейсы как контракт
from abc import ABC, abstractmethod
class PaymentProcessor(ABC):
'''Контракт для обработки платежей'''
@abstractmethod
def process(self, amount: float) -> bool:
'''Должна вернуть True/False'''
pass
class StripeProcessor(PaymentProcessor):
def process(self, amount: float) -> bool:
# Реализация
pass
class PayPalProcessor(PaymentProcessor):
def process(self, amount: float) -> bool:
# Реализация
pass
Контракт — это соглашение, которое делает модули независимыми и предсказуемыми.