Создайте свойства с помощью метода считывания лямбды и метода set

использование INT (3) для установки точки останова в коде является моим всем фаворитом времени

6
задан Jacob Marble 21 May 2011 в 19:22
поделиться

1 ответ

Ваша проблема в том, что тело лямбды должно быть выражением, а присваивание - оператором (сильное и глубокое различие в 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,

20
ответ дан 8 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: