Одинаково ли вызываются метод объекта и функция класса Python

Obj.add — связанный метод, поэтому достаточно b(2). A.add — функция из класса, ей нужно явно передать экземпляр: b(obj, 2).

Короткий ответ

Что ответить на собеседовании

Obj.add — связанный метод, поэтому достаточно b(2). A.add — функция из класса, ей нужно явно передать экземпляр: b(obj, 2).

Подробный разбор

Ответ с пояснениями

Условие

Класс A имеет def add(self, x): return self.value + x. Сравните b = obj.add и b = A.add. Как вызвать каждый вариант для x=2?

Ответ

Obj.add — связанный метод, поэтому достаточно b(2). A.add — функция из класса, ей нужно явно передать экземпляр: b(obj, 2).

При обращении через экземпляр механизм дескрипторов связывает self с obj. Простое извлечение A.add не создаёт эту привязку. Staticmethod и classmethod имеют другие правила, поэтому сначала уточните вид объявления. Неверное число аргументов здесь связано с binding, а не с разным результатом сложения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее