Функция Python isinstance()
isinstance()Это встроенная функция в Python, используемая для проверки того, является ли объект экземпляром указанного типа (или любого типа из кортежа типов).
isinstance()Это наиболее часто используемая функция проверки типов в Python. Она проверяет не только точный тип, но и учитывает отношения наследования (подклассы также являются экземплярами родительского класса).
Определение термина: isinstance 是 is an instance(是一个实例)的缩写。
Базовый синтаксис и параметры
Синтаксис
isinstance(object, classinfo)
Описание параметра
- Параметр object:
- Тип: любой объект
- Описание: объект для проверки.
- Параметр classinfo:
- Тип: тип, кортеж типов или абстрактный базовый класс
- Описание: тип, с которым выполняется проверка. Может быть отдельным типом или кортежем типов.
Описание функций
- Возвращаемое значение: Возвращает логическое значение
TrueилиFalse。 - Особенность: Возвращает True, если object является экземпляром подкласса classinfo.
Примеры
Пример 1: Базовое использование
Пример
# Проверка базовых типов
print(isinstance(123, int)) # Вывод: True
print(isinstance(3.14, float)) # Вывод: True
print(isinstance("hello", str)) # Вывод: True
print(isinstance([1, 2], list)) # Вывод: True
print(isinstance({"a": 1}, dict)) # Вывод: True
# Проверить None
print(isinstance(None, type(None))) # Вывод: True
# Проверить логические значения (примечание: bool — подкласс int)
print(isinstance(True, bool)) # Вывод: True
print(isinstance(True, int)) # Вывод: True (потому что bool наследуется от int)
print(isinstance(123, int)) # Вывод: True
print(isinstance(3.14, float)) # Вывод: True
print(isinstance("hello", str)) # Вывод: True
print(isinstance([1, 2], list)) # Вывод: True
print(isinstance({"a": 1}, dict)) # Вывод: True
# Проверить None
print(isinstance(None, type(None))) # Вывод: True
# Проверить логические значения (примечание: bool — подкласс int)
print(isinstance(True, bool)) # Вывод: True
print(isinstance(True, int)) # Вывод: True (потому что bool наследуется от int)
Ожидаемый вывод:
True True True True True True True True
Анализ кода:
- Он может проверять различные базовые типы.
- bool является подклассом int, поэтому True/False также являются экземплярами int.
Пример 2: Использование кортежа типов
Пример
# Проверка нескольких типов (с использованием кортежа)
value = 42
print(isinstance(value, (int, float))) # Вывод: True
print(isinstance(value, (str, list))) # Вывод: False
# Проверка смеси нескольких типов
value = "hello"
print(isinstance(value, (int, str, bytes))) # Вывод: True
# Используется в условных операторах
def process_data(data):
if isinstance(data, (list, tuple)):
return sum(data)
elif isinstance(data, (int, float)):
return data * 2
else:
return str(data)
print(process_data([1, 2, 3])) # Вывод: 6
print(process_data((1, 2, 3))) # Вывод: 6
print(process_data(10)) # Вывод: 20
print(process_data(3.14)) # Вывод: 6.28
print(process_data("hello")) # Вывод: hello
value = 42
print(isinstance(value, (int, float))) # Вывод: True
print(isinstance(value, (str, list))) # Вывод: False
# Проверка смеси нескольких типов
value = "hello"
print(isinstance(value, (int, str, bytes))) # Вывод: True
# Используется в условных операторах
def process_data(data):
if isinstance(data, (list, tuple)):
return sum(data)
elif isinstance(data, (int, float)):
return data * 2
else:
return str(data)
print(process_data([1, 2, 3])) # Вывод: 6
print(process_data((1, 2, 3))) # Вывод: 6
print(process_data(10)) # Вывод: 20
print(process_data(3.14)) # Вывод: 6.28
print(process_data("hello")) # Вывод: hello
Ожидаемый вывод:
True False True 6 6 20 6.28 hello
Анализ кода:
- Второй параметр может быть кортежем типов, что позволяет проверять несколько типов одновременно.
- Это очень удобно при работе с несколькими типами данных.
Пример 3: С наследованием классов
Пример
# Пример наследования классов
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
# Создание экземпляра
dog = Dog()
cat = Cat()
animal = Animal()
# isinstance учитывает наследование
print(isinstance(dog, Dog)) # Вывод: True
print(isinstance(dog, Animal)) # Вывод: True (экземпляр подкласса также является экземпляром родительского класса)
print(isinstance(dog, Cat)) # Вывод: False
print(isinstance(cat, Animal)) # Вывод: True
print(isinstance(animal, Dog)) # Вывод: False
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
# Создание экземпляра
dog = Dog()
cat = Cat()
animal = Animal()
# isinstance учитывает наследование
print(isinstance(dog, Dog)) # Вывод: True
print(isinstance(dog, Animal)) # Вывод: True (экземпляр подкласса также является экземпляром родительского класса)
print(isinstance(dog, Cat)) # Вывод: False
print(isinstance(cat, Animal)) # Вывод: True
print(isinstance(animal, Dog)) # Вывод: False
Ожидаемый вывод:
True True False True False
isinstance()Он проверяет цепочку наследования, поэтому экземпляры подкласса также являются экземплярами родительского класса.
Другие расширения
Встроенные функции Python3