Это обычная конструкция на большинстве объектно-ориентированных языков, поддерживающих наследование. Когда дочерний класс (в вашем случае int
) наследуется от родителя (в вашем случае object
), говорят, что он имеет «is-a», отношения. То есть, int
является (или an) object
.
Это отношение «is-a» является тем, что проверяет isinstance
. Из документов:
Возвращает true, если аргумент object является экземпляром аргумента classinfo или (прямой, косвенный или виртуальный) подкласс.
blockquote>Существует аналогичная функция
issubclass
для проверки того же отношения для класса вместо экземпляра этого класса. Фактически, в большинстве случаевisinstance(x, y) == issubclass(type(x), y)
.
type
возвращает точный класс, из которого был создан объект. Это означает, что проверкаtype(3) == object
в точности эквивалентна проверкеint == object
. Надеюсь, вы увидите, что это однозначно неверно.В отношении связанного касания классы всегда должны быть одной и той же ссылкой в заданном пробеге интерпретатора, поэтому вы можете использовать
is
вместо==
для сравнения , Таким образом,type(3) is int
будет правдой. Вот как==
реализовано для всех типов, с которыми вы когда-либо столкнетесь.