Является ли Python объектно-ориентированным языком и почему
Что проверяют
Не определение, а способность объяснить, что за словами стоит. Вопрос закрытый, ценность в продолжении: почему, как это устроено внутри и чем отличается от языков со строгой объектной моделью. Для питониста это ещё и проверка на понимание того, что язык мультипарадигменный и классы в нём не обязанность.
Как отвечать
Да, объектно-ориентированный, причём последовательнее многих: объектом является буквально всё. Число, строка, функция, модуль, исключение и сам класс, который является экземпляром type. Примитивов, живущих вне системы типов, нет, поэтому у целого числа есть методы, а функцию можно положить в словарь.
Дальше перечислите механизмы, привязывая каждый к языку, а не к учебнику.
Классы и экземпляры: атрибуты хранятся в словаре объекта, поэтому их можно добавлять на лету, а __slots__ это выключает.
Наследование, в том числе множественное, с порядком разрешения методов по алгоритму C3 и кооперативным super().
Полиморфизм без общего предка: достаточно, чтобы объект поддерживал нужные операции. Контракт формализуют через abc.ABC или typing.Protocol, но интерпретатору общий базовый класс не нужен.
Инкапсуляция по соглашению: приватности с принуждением в языке нет.
Завершите оговоркой: ООП тут не единственная парадигма. Функции первого класса, замыкания, генераторы и модули решают многое без классов, и это не отступление от стиля языка.
Где спотыкаются
Отвечают заученной триадой про наследование, инкапсуляцию и полиморфизм и не могут показать ни одного примера из своего кода. Дальше обычно просят написать класс, и разговор заканчивается.
Утверждают, что два подчёркивания делают атрибут приватным. Работает искажение имени, объект доступен по полному имени вида _Класс__атрибут, а смысл механизма в защите от случайного совпадения имён в наследнике.
Путают «всё есть объект» с «всё надо писать классами»: заводят класс с единственным методом там, где хватило бы функции, и не знают, что self это обычный первый параметр, а не ключевое слово.