Создайте свойство python с тем же именем, что и имя члена класса

Возможно ли в python создать свойство с тем же именем, что и имя переменной-члена класса. например

Class X:
    ...
    self.i = 10 # marker
    ...
    property(fget = get_i, fset = set_i)

Подскажите, пожалуйста, как я могу это сделать. Потому что, если я это сделаю, для оператора в маркере я получу переполнение стека для assingm

Ответов (1)

Решение

Возможно ли в python создать свойство с тем же именем, что и имя переменной-члена

Нет. Свойства, члены и методы используют одно и то же пространство имен.

оператор в маркере, я получаю переполнение стека

Четко. Вы пытаетесь установить i, который вызывает установщик для свойства i, который пытается установить i, который вызывает установщик для свойства i ... ad stackoverflowum.

Обычный шаблон - сделать член значения серверной части условно закрытым, добавив к нему префикс '_':

class X(object):
    def get_i(self):
        return self._i
    def set_i(self, value):
        self._i= value
    i= property(get_i, set_i)

Обратите внимание, что для правильной работы свойства «свойство» необходимо использовать объекты нового стиля (подкласс «объект»).