Функция isinstance()
- позволяет проверить, принадлежит ли экземпляр классу, а функция issubclass()
позволяет проверить, наследуется ли класс.
Синтаксис isinstance()
:
isinstance(object, classinfo)
Аргументы isinstance()
:
object
- объект, требующий проверки,classinfo
- класс, кортеж с классами или рекурсивный кортеж кортежей или, как в Python 3.10, может быть объединением нескольких типов (например, int | str).
О функции isinstance()
Функция isinstance()
вернет значение True
, если проверяемый объект является экземпляром указанного класса (классов) или его подкласса (прямого, косвенного или виртуального).
Если объект не является экземпляром этого типа, то функция всегда возвращает False
.
Функция isinstance()
может проверять класс, кортеж с классами или рекурсивный кортеж кортежей. Другие типы последовательностей не поддерживаются аргументом classinfo.
Если аргумент classinfo является не классом или кортежем с классами, а начиная с Python 3.10 записью, объединяющей несколько типов (например, int | str), то возникает исключение TypeError
.
Пример:
num = 20
print(isinstance(num, str))
Результат: False
Можно объединить несколько типов в Python 3.10:
num = 20
print(isinstance(num, str | int))
Результат: True
Пример классов при наследовании:
class Person:
name = 'Vladislav'
class Student(Person):
age = 23
person = Person()
student = Student()
print(f'person isinstance of Person: {isinstance(person, Person)}')
print(f'person isinstance of Student: {isinstance(person, Student)}')
print(f'student isinstance of Person: {isinstance(student, Person)}')
print(f'student isinstance of Student: {isinstance(student, Student)}')
Результат:
person isinstance of Person: True
person isinstance of Student: False
student isinstance of Person: True
student isinstance of Student: True
Далее о issubclass()
Синтаксис issubclass()
issubclass(class, classinfo)
Аргументы issubclass()
:
class
- класс, требующий проверки,classinfo
- класс или кортеж с классами.
Функция issubclass()
возвращает True
, если указанный класс является подклассом (прямым, косвенным или виртуальным) указанного класса(ов) classinfo. Класс считается подклассом самого себя.
Функция issubclass()
может тестировать класс, кортеж классов или рекурсивный кортеж кортежей. Другие типы последовательностей не поддерживаются аргументом classinfo.
Начиная с Python 3.10, если аргумент classinfo является не классом или кортежем, содержащим классы, а записью, объединяющей несколько типов (например, int | str), генерируется исключение TypeError
.
Пример работы с issubclass()
class Person:
name = 'Vladislav'
class Student(Person):
age = 23
print(f'Student issubclass of Person: {issubclass(Student, Person)}')
print(f'Person issubclass of Student: {issubclass(Person, Student)}')
Результат:
Student issubclass of Person: True
Person issubclass of Student: False