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.