@property
сам по себе (по крайней мере, при использовании, как показано) только обеспечивает получение. Если вы также не предоставите установщик, свойство доступно только для чтения.
class Test:
def __init__(self, raw_number):
<b>self.number</b> = raw_number
@property
def number(self):
return self._raw_number[0]
<b>@number.setter
def number(self, value):
self._raw_number = value</b>
Имейте в виду, что установщик должен отвечать за то, чтобы значение _raw_number
было фактически индексируемым. Кроме того, метод __init__
может использовать установщик при инициализации свойства; только сами получатель и установщик должны иметь доступ к базовому атрибуту _raw_number
.
property
может использоваться для одновременной установки получателя и установщика.
class Test:
def __init__(self, raw_number):
self.number = raw_number
def _getter(self):
return self._raw_number[0]
def _setter(self, value):
try:
value[0]
except IndexError:
raise TypeError("Value must be indexable")
self._raw_number = value
number = property(_getter, _setter)
# Clean up the namespace before creating the class
del _getter
del _setter