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

Для проверки, является ли объект экземпляром конкретного класса, можно использовать функцию isinstance(). Она принимает два аргумента: объект и класс (или кортеж классов), и возвращает True, если объект является экземпляром этого класса (или одного из классов в кортеже), и False в противном случае.
Пример: isinstance(my_object, MyClass)

Для проверки, является ли объект экземпляром конкретного класса в Python, можно использовать две основные функции:

  • isinstance(object, classinfo): Это встроенная функция, которая возвращает True, если object является экземпляром класса classinfo или подклассом класса classinfo. classinfo может быть как одним классом, так и кортежем классов. Если object не является экземпляром указанных классов или их подклассов, возвращается False.
  • type(object) is Class: Этот подход возвращает True только если object является именно экземпляром класса Class, а не его подкласса. В большинстве случаев предпочтительнее использовать isinstance, поскольку он корректно обрабатывает наследование.

Примеры:


class Animal:
  pass

class Dog(Animal):
  pass

animal = Animal()
dog = Dog()

print(isinstance(animal, Animal))  # Вывод: True
print(isinstance(dog, Animal))     # Вывод: True (Dog - подкласс Animal)
print(isinstance(animal, Dog))     # Вывод: False
print(type(animal) is Animal)     # Вывод: True
print(type(dog) is Animal)        # Вывод: False
print(type(dog) is Dog)           # Вывод: True
  

Рекомендации:

  • В большинстве случаев использования (особенно когда важна обработка наследования) следует использовать isinstance().
  • Использовать type(object) is Class стоит только в тех ситуациях, когда необходимо строго проверить, что объект принадлежит именно указанному классу, а не его подклассу. Такие ситуации встречаются реже.
  • Важно помнить, что оба подхода работают с классами нового стиля (new-style classes) в Python 3, которые неявно наследуются от object.
0