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