TG Telegram Group & Channel
Zen of Python | United States America (US)
Create: Update:

Type Hinting vs. Type Checking vs. Data Validation: в чём разница?

Python — это язык с динамической типизацией («тип переменной определяется во время выполнения программы»). Это даёт большую гибкость, но одновременно приводит к ошибкам. Чтобы справляться с этим, разработчики используют три инструмента: аннотации типов, проверка типов и валидация данных. У каждого из них своя цель.


Type Hinting — подсказки, а не контроль

Аннотации типов (Type Hinting) — это способ добавить метаинформацию о типах данных, которую Python сам по себе не использует для исполнения кода:


def create_user(first_name: str, last_name: str, age: int) -> dict:
return {"first_name": first_name, "last_name": last_name, "age": age}


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


Type Checking

Проверка типов происходит до выполнения программы и помогает выявить несоответствия между ожидаемыми и фактическими типами, но не останавливает выполнение кода.

### Как работает:

Для статической проверки используется внешний инструмент, например, MyPy


mypy your_script.py


Если передать строку вместо числа:


create_user("John", "Doe", "38") # строка, а не int


MyPy выдаст ошибку:


error: Argument "age" to "create_user" has incompatible type "str"; expected "int"


Важное ограничение: не проверяет данные из внешних источников (например, API).


Data Validation

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


if not isinstance(age, int):
raise TypeError("Age must be an integer")


Ручная валидация быстро становится громоздкой. Здесь на помощь приходят библиотеки, такие как Pydantic.

Pydantic использует type hints для автоматической валидации данных. Пример с использованием @validate_call:


from pydantic import validate_call

@validate_call
def create_user(first_name: str, last_name: str, age: int) -> dict:
return {"first_name": first_name, "last_name": last_name, "age": age}


Если передать некорректный тип:


create_user("John", "Doe", "38") # строка


Вы получите подробное сообщение об ошибке:


1 validation error for create_user
age
Input should be a valid integer (type=type_error.integer)


#основы
@zen_of_python

Type Hinting vs. Type Checking vs. Data Validation: в чём разница?

Python — это язык с динамической типизацией («тип переменной определяется во время выполнения программы»). Это даёт большую гибкость, но одновременно приводит к ошибкам. Чтобы справляться с этим, разработчики используют три инструмента: аннотации типов, проверка типов и валидация данных. У каждого из них своя цель.


Type Hinting — подсказки, а не контроль

Аннотации типов (Type Hinting) — это способ добавить метаинформацию о типах данных, которую Python сам по себе не использует для исполнения кода:


def create_user(first_name: str, last_name: str, age: int) -> dict:
return {"first_name": first_name, "last_name": last_name, "age": age}


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


Type Checking

Проверка типов происходит до выполнения программы и помогает выявить несоответствия между ожидаемыми и фактическими типами, но не останавливает выполнение кода.

### Как работает:

Для статической проверки используется внешний инструмент, например, MyPy


mypy your_script.py


Если передать строку вместо числа:


create_user("John", "Doe", "38") # строка, а не int


MyPy выдаст ошибку:


error: Argument "age" to "create_user" has incompatible type "str"; expected "int"


Важное ограничение: не проверяет данные из внешних источников (например, API).


Data Validation

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


if not isinstance(age, int):
raise TypeError("Age must be an integer")


Ручная валидация быстро становится громоздкой. Здесь на помощь приходят библиотеки, такие как Pydantic.

Pydantic использует type hints для автоматической валидации данных. Пример с использованием @validate_call:


from pydantic import validate_call

@validate_call
def create_user(first_name: str, last_name: str, age: int) -> dict:
return {"first_name": first_name, "last_name": last_name, "age": age}


Если передать некорректный тип:


create_user("John", "Doe", "38") # строка


Вы получите подробное сообщение об ошибке:


1 validation error for create_user
age
Input should be a valid integer (type=type_error.integer)


#основы
@zen_of_python


>>Click here to continue<<

Zen of Python




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)