issubclass(class, classinfo)
bool
.Функция issubclass()
возвращает True
, если указанный класс class
является подклассом указанного класса (классов) classinfo
(прямым, косвенным или виртуальным) . Класс считается подклассом самого себя.
Функцией issubclass()
можно проверить класс, кортеж с классами, либо рекурсивный кортеж кортежей. Другие типы последовательностей аргументом classinfo
не поддерживаются.
Если аргумент classinfo
не является классом, либо кортежем с классами, а с версии Python 3.10 записью, объединяющей нескольких типов (например int | str
), то возбуждается исключение TypeError
.
Существует аналогичная функция isinstance()
для проверки того же отношения, только для объекта - экземпляра класса. В большинстве случаев isinstance(x, y) == issubclass(type(x), y)
.
Для проверки, является ли объект экземпляром класса (классов) используйте функцию isinstance()
. Так же смотрите встроенную функцию type()
Изменено в версии 3.10: аргумент classinfo
может иметь тип Union и и записываться как побитовое или - |
.
>>> issubclass(int, str | object)
# True
>>> issubclass(str, object | str)
# True
class A:
pass
class B(A):
pass
>>> issubclass (B, A)
# True
>>> issubclass (A, B)
# False
class C:
pass
# использование кортежа с классами для проверки
>>> isinstance (B(), (A, C))
# True
# использование записи Union (через побитовое или `|`)
>>> isinstance (B(), A | C))
# True
>>> isinstance (B, A)
# False
Класс B
унаследован от A
, но он не является его сущностью. Классы сами по себе объекты и функция isinstance()
к ним вполне применима. Класс B
является сущностью класса type
, который в свою очередь, унаследован от object
, поэтому:
>>> isinstance(B, object)
# True