Как в Python проверить, является ли объект экземпляром класса или его подкласса

Ответ

В Python для проверки принадлежности объекта к классу или проверки наследования классов используются встроенные функции isinstance() и issubclass().

1. isinstance(object, classinfo)

Проверяет, является ли object экземпляром класса classinfo или любого из его дочерних классов.

  • object: проверяемый объект.
  • classinfo: класс, кортеж классов или типов.

Когда использовать: Это основной способ для проверки типа объекта в рантайме.

2. issubclass(class, classinfo)

Проверяет, является ли class дочерним классом classinfo. Важно, что эта функция работает с классами, а не с их экземплярами.

  • class: проверяемый класс.
  • classinfo: родительский класс или кортеж классов.

Когда использовать: При работе с иерархиями классов, например, в метапрограммировании или при построении архитектуры фреймворков.

Пример

class Animal:
    pass

class Cat(Animal):
    pass

class Dog(Animal):
    pass

# Создаем экземпляры
my_cat = Cat()

# --- Проверка с isinstance() ---

# my_cat является экземпляром Cat?
print(f"isinstance(my_cat, Cat): {isinstance(my_cat, Cat)}")  # True

# my_cat является экземпляром родительского класса Animal?
print(f"isinstance(my_cat, Animal): {isinstance(my_cat, Animal)}") # True

# my_cat является экземпляром Dog?
print(f"isinstance(my_cat, Dog): {isinstance(my_cat, Dog)}")    # False

# --- Проверка с issubclass() ---

# Класс Cat является подклассом Animal?
print(f"issubclass(Cat, Animal): {issubclass(Cat, Animal)}")  # True

# Класс Animal является подклассом Cat?
print(f"issubclass(Animal, Cat): {issubclass(Animal, Cat)}")  # False