Сообщить об ошибке.

Определение типа переменной/объекта в Python

Код ниже использует шаблон if type(OBJECT) is types, для сравнения экземпляра пользовательского списка MyList, который наследуется от встроенного типа list. В данном случае, это НЕ предпочтительный шаблон для сравнения типов.

class  MyList(list):
    pass

lst = MyList('test')
print(lst)

# плохая практика
if type(lst) is list:
    print('Это список')
else:
    print('Это НЕ список')

# ['t', 'e', 's', 't']
# Это НЕ список

Встроенный класс type() - это класс всех классов в языке Python и является собственным метаклассом языка Python.

# type - это тип всех типов, для которых
# явно не указан иной метакласс
>>> type(list)
# <class 'type'>
>>> type(int)
# <class 'type'>
>>> class Bar(): pass
>>> type(Bar)
# <class 'type'>
>>> b = Bar()
>>> type(b)
# <class '__main__.Bar'>

Класс type() лучше использовать для прямого сравнения типа (идентичности) экземпляра объекта:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

class Circle:
    def __init__(self, radius):
        self.radius = radius

c = Circle(2)
r = Rectangle(3, 4)

if type(r) is type(c):
    print("Типы объектов совпадают")
else:
    print("Типы объектов не совпадают")

# Типы объектов не совпадают

Сравнение со встроенными типами.

Для сравнения типов переменных/объектов со встроенными типами Python лучше всего использовать функцию isinstance, так как она поддерживает наследование (экземпляр производного класса также является экземпляром базового класса), а проверка на равенство типов - нет (требуется идентичность типов и отклоняет экземпляры подтипов, также называемых подклассами).

Встроенная функция isinstance возвращает не тип объекта, а True в случае успеха, к тому же isinstance может сравнивать определенный тип с несколькими ожидаемыми типами.

class  MyList(list):
    pass

lst = MyList('test')
print(lst)
# ['t', 'e', 's', 't']

# Наилучшая практика
if isinstance(lst, list):
    print('Это список')
else:
    print('Это НЕ список')

Заметьте, использование isinstance - это не панацея, а по крайней мере лучше, чем просто проверка типов на равенство. Предпочтительное Pythonic решение почти всегда "утиная типизация".