Sobes.tech
Назад к вопросам
Middle
231
questionbank

Какие существуют виды типизации в Python?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

В Python типизация в основе своей динамическая и сильная. Это значит, что тип объекта определяется во время выполнения, а смешение несовместимых типов обычно приводит к ошибке, а не к неявному приведению. Дополнительно часто используют статическую типизацию на уровне подсказок типов, но это скорее инструмент проверки, а не механизм самого языка.

Определение:

В Python обычно выделяют несколько аспектов типизации:

  • Динамическая типизация — тип принадлежит объекту, а не переменной, и определяется во время выполнения.
  • Сильная типизация — Python не делает неявные опасные преобразования между несвязанными типами.
  • Статическая типизация через аннотации — можно описывать ожидаемые типы с помощью type hints, чтобы их проверяли линтеры и type checker'ы, например mypy или pyright.
  • Duck typing — важен не формальный тип объекта, а наличие нужных методов и поведения: если объект “крякает как утка”, его можно использовать там, где ждут утку.

Пример использования:

def add(a: int, b: int) -> int:
    return a + b

print(add(2, 3))      # 5
print(add("2", "3"))  # "23" в runtime, но type checker покажет ошибку

Здесь Python выполнит оба вызова, потому что аннотации сами по себе не блокируют выполнение. Но инструменты статического анализа подскажут, что второй вызов нарушает ожидаемый контракт.

Пояснение кода:

Код показывает, что аннотация int — это подсказка для человека и инструментов проверки, а не жесткое ограничение языка.

  • В add(2, 3) передаются числа, операция + дает арифметическую сумму.
  • В add("2", "3") передаются строки, и + работает как конкатенация.
  • Python не запрещает такой вызов на уровне runtime, потому что типы проверяются динамически.
  • Если включить статическую проверку типов, второй вызов будет найден как потенциальная ошибка.

Ключевые моменты:

  • В Python основа — динамическая типизация: тип у объекта, а не у переменной.
  • Python — сильно типизированный язык: он не делает неявные небезопасные преобразования между типами.
  • Аннотации типов не меняют поведение интерпретатора, а помогают читать код и ловить ошибки раньше.
  • Duck typing часто важнее формального класса: используется поведение объекта, а не его точный тип.
  • На собеседовании полезно различать типизацию языка и статическую проверку типов инструментами.