Easyisinstance

Чем type() отличается от isinstance()?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

type(obj) — возвращает класс объекта. type(obj) == intточное сравнение (без наследования). isinstance(obj, int) — проверяет с учётом наследования.

class MyInt(int):
    pass

mi = MyInt(5)
type(mi) == int      # False
isinstance(mi, int)  # True

# tuple типов
isinstance(x, (int, float))

# с ABC
import collections.abc
isinstance(x, collections.abc.Iterable)

# type() с тремя аргументами — динамическое создание класса
Dog = type('Dog', (object,), {'bark': lambda self: print('woof')})
  • isinstance — стандарт для type checking (учитывает inheritance);
  • Duck typing — idiomatic Python не проверяет типы, а ловит AttributeError (EAFP);
  • Type hints (Python 3.5+) + mypy — статическая проверка без runtime checks.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.