issubclass
Функция issubclass() проверяет, является ли указанный класс подклассом другого класса или кортежа классов. Возвращает True, если класс является подклассом, и False в противном случае.
Синтаксис
issubclass(class, classinfo)
Аргументы
- class:
- Что означает: Класс, который нужно проверить.
- Возможные значения: Любой пользовательский или встроенный класс.
- classinfo:
- Что означает: Класс или кортеж классов, с которыми нужно сравнить.
- Возможные значения: Один класс или кортеж, содержащий классы, или Union, содержащий классы.
Возвращаемое значение
Возвращает True, если class является подклассом classinfo. Иначе возвращает False.
Примеры использования
# Проверка для встроенных классов
print(issubclass(bool, int)) # True
# Пользовательские классы
class Parent:
pass
class Child(Parent):
pass
print(issubclass(Child, Parent)) # True
# Проверка нескольких классов
print(issubclass(Child, (Parent, int))) # True
# Класс не является подклассом
print(issubclass(int, str)) # False
Частые ошибки
Передача экземпляра класса вместо самого класса:
class MyClass: pass obj = MyClass() print(issubclass(obj, MyClass)) # Ошибка: TypeError
Как исправить: Передайте класс, а не объект:
print(issubclass(MyClass, MyClass)) # True
Использование неподходящего второго аргумента:
print(issubclass(int, [str, list])) # Ошибка: TypeError
Как исправить: Используйте кортеж вместо списка:
print(issubclass(int, (str, list))) # False
Часто задаваемые вопросы
Что произойдет, если класс не является подклассом? Вернется False:
print(issubclass(str, int)) # False
Можно ли проверить принадлежность к нескольким классам? Да, передайте кортеж классов в качестве второго аргумента:
class A: pass class B(A): pass print(issubclass(B, (A, int))) # True
Как работает issubclass() с вложенными классами? Если вложенный класс наследует родительский, результат будет True:
class Outer: class Inner(Outer): pass print(issubclass(Outer.Inner, Outer)) # True