Как установить доступный только для чтения @property в __init__ - PullRequest
0 голосов
/ 03 ноября 2018

Мне просто интересно, как я могу использовать свойство только для чтения и установить начальные значения в __init__

Я бы хотел что-то подобное: Просто приватная (столько, сколько python разрешает конфиденциальность) переменная, которая устанавливается в конструкторе.

class A:
    def __init__(self, value: int):
         self.value = value

    @property
    def value(self):
        return self.value

Насколько я знаю, это невозможно (невозможно установить значение)?

1 Ответ

0 голосов
/ 03 ноября 2018

Функции являются гражданами 1-го класса в питоне. В вашем классе не может быть двух членов, имена которых совпадают. По сути, у вашего класса уже есть self.value типа <class 'property'>, который ваш код пытается установить в целое число, заданное как value, что запрещено - поэтому появляется эта ошибка.

Обойдите это:

class A:
    def __init__(self, value: int):
         self._value = value  # private backer

    @property
    def value(self):
        return self._value 

my_a = A(22)       # works, no error
print(my_a.value)  # 22
...