← Все вопросы
Как проверить тип объекта: isinstance или type?
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.
Ваш ответ
Войдите, чтобы ответить на вопрос.