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

Частые ошибки

  1. Передача экземпляра класса вместо самого класса:

    class MyClass:
        pass
    
    obj = MyClass()
    print(issubclass(obj, MyClass))  # Ошибка: TypeError
    

    Как исправить: Передайте класс, а не объект:

    print(issubclass(MyClass, MyClass))  # True
    
  2. Использование неподходящего второго аргумента:

    print(issubclass(int, [str, list]))  # Ошибка: TypeError
    

    Как исправить: Используйте кортеж вместо списка:

    print(issubclass(int, (str, list)))  # False
    

Часто задаваемые вопросы

  1. Что произойдет, если класс не является подклассом? Вернется False:

    print(issubclass(str, int))  # False
    
  2. Можно ли проверить принадлежность к нескольким классам? Да, передайте кортеж классов в качестве второго аргумента:

    class A:
        pass
    
    class B(A):
        pass
    
    print(issubclass(B, (A, int)))  # True
    
  3. Как работает issubclass() с вложенными классами? Если вложенный класс наследует родительский, результат будет True:

    class Outer:
        class Inner(Outer):
            pass
    
    print(issubclass(Outer.Inner, Outer))  # True