isinstance
Функция isinstance() проверяет, принадлежит ли объект указанному классу или кортежу классов. Возвращает True, если объект соответствует, и False в противном случае.
Синтаксис
isinstance(object, classinfo)
Аргументы
- object:
- Что означает: Объект, который нужно проверить.
- Возможные значения: Любой объект.
- classinfo:
- Что означает: Класс, тип или кортеж классов и типов, с которыми нужно сравнить объект.
- Возможные значения: Один класс или кортеж, содержащий классы, или Union, содержащий классы.
Возвращаемое значение
Возвращает True, если объект принадлежит указанному классу (или одному из классов из кортежа). Иначе возвращает False.
Примеры использования
# Проверка принадлежности числу
print(isinstance(42, int)) # True
# Проверка принадлежности строке
print(isinstance("hello", str)) # True
# Проверка вхождения в несколько классов
print(isinstance(3.14, (int, float))) # True
# Проверка пользовательского класса
class MyClass:
pass
obj = MyClass()
print(isinstance(obj, MyClass)) # True
Эквивалентный код
def pyplanet_isinstance(obj, classinfo):
if isinstance(classinfo, tuple):
return any(pyplanet_isinstance(obj, cls) for cls in classinfo)
return obj.__class__ is classinfo or issubclass(obj.__class__, classinfo)
Частые ошибки
Передача некорректного второго аргумента:
print(isinstance(42, [int, float])) # Ошибка: TypeError
Как исправить: Используйте кортеж вместо списка:
print(isinstance(42, (int, float))) # True
Ошибочное ожидание проверки содержимого коллекций:
data = [1, 2, 3] print(isinstance(data, int)) # False
Как исправить: Проверяйте тип элемента коллекции с помощью цикла или функций вроде all/map:
print(all(isinstance(i, int) for i in data)) # True
Проблемы с наследованием:
class Parent: pass class Child(Parent): pass obj = Child() print(isinstance(obj, Parent)) # True
Убедитесь, что вы понимаете принцип работы наследования в Python.
Часто задаваемые вопросы
Что произойдет, если объект не принадлежит указанному классу? Вернется False:
print(isinstance(42, str)) # False
Можно ли передать несколько классов? Да, передайте их в виде кортежа:
print(isinstance(3.14, (int, float))) # True
Как проверить пользовательский класс? Используйте имя класса, как с встроенными типами:
class MyClass: pass obj = MyClass() print(isinstance(obj, MyClass)) # True
Работает ли isinstance() с наследованием? Да, если объект является экземпляром дочернего класса, проверка родительского класса вернет True:
class Parent: pass class Child(Parent): pass obj = Child() print(isinstance(obj, Parent)) # True
Подходит ли isinstance() для проверки всех элементов коллекции? Нет, нужно использовать цикл или функции all и map:
data = [1, 2, 3] print(all(isinstance(i, int) for i in data)) # True