issubclass()

Функция issubclass() проверяет, является ли первый класс подклассом второго. Если передан кортеж классов, возвращает True при совпадении хотя бы с одним из них. Сам класс считается своим подклассом.

Сигнатура

issubclass(class, classinfo)

Параметры:

  • class — проверяемый класс.

  • classinfo — класс или кортеж классов, относительно которых выполняется проверка.

Возвращает: True или False. Бросает TypeError, если class не является классом.

Примеры

Базовая проверка наследования:

class Animal:
    pass

class Dog(Animal):
    pass

print(issubclass(Dog, Animal))
print(issubclass(Animal, Dog))
print(issubclass(Dog, Dog))
True
False
True

Проверка по кортежу классов:

print(issubclass(bool, (int, float)))
print(issubclass(str, (int, float)))
True
False

Цепочка наследования:

class A: pass
class B(A): pass
class C(B): pass

print(issubclass(C, A))
print(issubclass(C, B))
True
True

Использование в фабрике:

class Sensor: pass
class TempSensor(Sensor): pass
class Motor: pass

def register(cls):
    if not issubclass(cls, Sensor):
        raise TypeError("ожидается наследник Sensor")
    print(f"{cls.__name__} зарегистрирован")

register(TempSensor)
TempSensor зарегистрирован

Отличие от isinstance(): issubclass() работает с классами, а не с экземплярами:

class Robot: pass
r = Robot()
print(issubclass(Robot, object))
# print(issubclass(r, object))  # TypeError
True

См. также

Примечание

Описание основано на официальной документации Python (docs.python.org), распространяемой под лицензией PSF License v2. © Python Software Foundation.