Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
isinstance(): Проверка типа объекта в Python
isinstance() — это встроенная функция Python, которая проверяет, является ли объект экземпляром определённого класса или кортежа классов. Это один из самых важных инструментов для работы с типами в Python и проверки полиморфизма.
Базовый синтаксис
isinstance(object, classinfo)
Функция возвращает True если объект является экземпляром класса, и False в противном случае.
Простые примеры
x = 42
print(isinstance(x, int)) # True
y = "hello"
print(isinstance(y, str)) # True
print(isinstance(y, int)) # False
z = [1, 2, 3]
print(isinstance(z, list)) # True
print(isinstance(z, tuple)) # False
Проверка нескольких типов
Можно проверить, является ли объект экземпляром любого из нескольких классов, передав кортеж:
value = 3.14
print(isinstance(value, (int, float, str))) # True, потому что это float
def process_number(data):
if isinstance(data, (int, float)):
return data * 2
else:
return None
Работа с наследованием и полиморфизмом
isinstance() работает с иерархией классов. Если класс наследуется от другого, объект будет экземпляром обоих:
class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(isinstance(dog, Dog)) # True
print(isinstance(dog, Animal)) # True - потому что Dog наследуется от Animal
Отличие от type()
Важно различать isinstance() и type():
class Parent:
pass
class Child(Parent):
pass
obj = Child()
# isinstance() учитывает наследование
print(isinstance(obj, Child)) # True
print(isinstance(obj, Parent)) # True
# type() возвращает точный тип
print(type(obj) is Child) # True
print(type(obj) is Parent) # False
Для проверки типов всегда нужно использовать isinstance(), а не type(), потому что она правильно работает с наследованием.
Практическое применение
def validate_input(data):
if isinstance(data, str):
return f"String: {data}"
elif isinstance(data, int):
return f"Integer: {data}"
elif isinstance(data, list):
return f"List with {len(data)} items"
else:
return "Unknown type"
print(validate_input("test")) # String: test
print(validate_input(42)) # Integer: 42
print(validate_input([1, 2, 3])) # List with 3 items
isinstance() с абстрактными классами
В Python можно использовать isinstance() с abc (Abstract Base Classes):
from abc import ABC, abstractmethod
class DataProcessor(ABC):
@abstractmethod
def process(self):
pass
class JSONProcessor(DataProcessor):
def process(self):
return "processing JSON"
processor = JSONProcessor()
print(isinstance(processor, DataProcessor)) # True
Производительность
isinstance() работает быстро и эффективно. Для проверки нескольких типов лучше использовать кортеж вместо нескольких вызовов:
# Неоптимально
if isinstance(x, int) or isinstance(x, float) or isinstance(x, complex):
pass
# Оптимально
if isinstance(x, (int, float, complex)):
pass
isinstance() — это фундаментальная функция для написания надёжного и типобезопасного Python кода, особенно при работе с полиморфизмом и иерархиями классов.