Ruff type-comparison (E721)

type-comparison в Ruff проверяет сравнение типов объектов с использованием == и других операторов сравнения.

Почему это неправильно

Использование isinstance вместо прямого сравнения типов предпочтительно, поскольку оно также проверяет, является ли объект экземпляром класса или его подкласса.

Если необходимо проверить точное соответствие типа, следует использовать is или is not.

Известные проблемы

При использовании библиотек, которые переопределяют оператор == (таких как NumPy, Pandas и SQLAlchemy), это правило может вызывать ложные срабатывания, поскольку замена == на is или is not изменит поведение кода.

Например, следующие операции не эквивалентны:

import numpy as np

np.array([True, False]) == False  # array([False,  True])
np.array([True, False]) is False  # False

Пример ошибки

if type(obj) == type(1):
    pass

if type(obj) == int:
    pass

Как правильно

if isinstance(obj, int):
    pass