Ответ
В 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