Найти в Дзене
326 подписчиков

Вопрос из собеседования. Почему этот код выведет ошибку?


Сначала анализируем цепочку вызовов, отличая методы класса от обычных функций. Определяем что такое a и b.
Параметр а - это метод класса. А определяется в момент создания класса. b — это функция, потому что она присваивается атрибуту экземпляра класса.
Далее вспоминаем, что вызов метода применительно к экземпляру класса = вызову метода применительно к классу с первым аргументом в качестве экземпляра. Например, c.method() - это тоже самое, что и C.method(c).
Когда мы вызываем c.a() мы получаем C.a(c). Тут в качестве аргумента self (такое имя нужно, чтобы запутать) в метод передастся экземпляр класса. Внутри a вызывается функция b, которой нужен аргумент, т.к. она задана как lambda self: None. Если b - это обычная функция, то передачи экземпляра в качестве аргумента не произойдёт. В итоге функция вызывается без аргумента.

Ответ: ошибка возникает потому, что функции b не передан аргумент. Не забудьте подкрепить ответ вышеприведенными доводами, и тогда работодатель увидит ваши аналитические способности и примет на работу.
Вопрос из собеседования. Почему этот код выведет ошибку?  Сначала анализируем цепочку вызовов, отличая методы класса от обычных функций. Определяем что такое a и b. Параметр а - это метод класса.
Около минуты