← Назад к вопросам

Что такое isinstance?

3.0 Senior🔥 261 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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 кода, особенно при работе с полиморфизмом и иерархиями классов.
Что такое isinstance? | PrepBro