← Все вопросы

Как проверить тип объекта: isinstance или type?

Задан 4 месяца назад1.1к просмотров3 ответа
14

Нужно проверить, что переменная — это, например, список. Видел два способа: type(x) == list и isinstance(x, list). Какой правильный и в чём разница?

3 ответа

26

Почти всегда правильный выбор — isinstance, потому что он учитывает наследование, а type() == — нет.

class Animal: pass
class Dog(Animal): pass

d = Dog()
print(isinstance(d, Animal))    # True — пёс это и есть животное
print(type(d) == Animal)        # False — точное совпадение типа

То есть isinstance отвечает на вопрос "является ли объект этим типом ИЛИ его наследником", а type() == — "тип ровно такой, без наследников". В 99% случаев тебе нужно первое. Бонус: isinstance умеет проверять сразу несколько типов: isinstance(x, (int, float)).

9

Бери isinstance. type() == оправдан только в редком случае, когда тебе принципиально нужно отсечь наследников и проверить тип точь-в-точь.

Стахей Стреха а если просто число проверить — int или float — как лучше? · 4 месяца назад
Эльвира Козлова @isinstance(x, (int, float)), кортежем типов · 4 месяца назад
5

isinstance.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект