Obj.add — связанный метод, поэтому достаточно b(2). A.add — функция из класса, ей нужно явно передать экземпляр: b(obj, 2).
Одинаково ли вызываются метод объекта и функция класса Python
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, а не с разным результатом сложения.