использование INT (3) для установки точки останова в коде является моим всем фаворитом времени
Ваша проблема в том, что тело лямбды должно быть выражением, а присваивание - оператором (сильное и глубокое различие в Python). Если вы настаиваете на использовании лямбда
, вы встретите много таких случаев и узнаете обходные пути (обычно они есть, но не всегда), например, в этом случае:
name = property(lambda self: self.__name,
lambda self, value: setattr(self,
'_X__name',
self.process_value(value)))
т.е. используйте встроенный setattr
(который является функцией и, следовательно, допустим в теле лямбда
), а не присваивание (которое является оператором и поэтому неприемлемо в лямбда
body).
Изменить : вам также необходимо вручную изменить имя для атрибута двойного подчеркивания (изменив __ name
на _X__name
, когда вы находитесь в классе X), где имя атрибута представлено в виде строки в кавычках, поскольку оно должно быть в setattr,