В Python функции type()
и isinstance()
используются для проверки типа объекта. Однако есть несколько ключевых различий в их использовании и поведении.
Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
Функция type()
Функция type()
возвращает тип объекта, который передается ей в качестве аргумента. Это обычно используется для определения, к какому классу принадлежит определенный объект.
Например, можно проверить, является ли переменная целым числом или строкой:
x = 10 print(type(x) == int) # вернет True y = "Hello" print(type(y) == str) # вернет True
Функция isinstance()
Функция isinstance()
проверяет, является ли объект экземпляром указанного класса или его подкласса. Если требуется проверить, принадлежит ли объект к определенному классу или его подклассу, лучше использовать isinstance()
.
Например, можно проверить, является ли переменная экземпляром класса int
или его подкласса:
x = 10 print(isinstance(x, int)) # вернет True
На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.
Основное различие
Основное различие между этими двумя функциями заключается в том, что type()
не учитывает наследование (то есть не считает объект экземпляром класса, если он является экземпляром подкласса), в то время как isinstance()
это делает.
Вот пример для демонстрации:
class MyInt(int): pass x = MyInt() print(type(x) == int) # вернет False print(isinstance(x, int)) # вернет True
В этом примере x
является экземпляром MyInt
, который является подклассом int
. type()
не считает x
экземпляром int
, потому что x
прямо не принадлежит классу int
. С другой стороны, isinstance()
считает x
экземпляром int
, потому что MyInt
является подклассом int
.
В общем случае, когда требуется учесть наследование, лучше использовать isinstance()
.
Добавить комментарий