class property(fget=None, fset=None, fdel=None, doc=None)
fget=None
- функция для получения значения атрибутаfset=None
- функция для установки значения атрибутаfdel=None
- функция для удаления значения атрибутаdoc=None
- строка, для строки документации атрибутаКласс property()
позволяет использовать методы в качестве вычисляемых свойств объектов (дескрипторов данных).
Если задана строка doc
, то она будет строкой атрибута свойства. В противном случае строка документации будет скопирована из функции fget
, если она существует.
Типичное использование класса property()
- определить дескриптор (управляемый атрибут) x
:
class C: def __init__(self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x x = property(getx, setx, delx, "I'm the 'x' property.")
Если c
является экземпляром C
, то:
c.x
вызовет метод getx
,c.x = value
вызовет setx
,del c.x
вызовет delx
.Используя класс property()
в качестве декоратора @property
можно легко создавать вычисляемые свойства только для чтения:
class Parrot: def __init__(self): self._voltage = 100000 @property def voltage(self): """Get the current voltage.""" return self._voltage p = Parrot() p.voltage = 220 # AttributeError del p.voltage # AttributeError
Объект декоратора @property
также имеет методы getter
, setter
и deleter
, которые можно так же использовать в качестве декораторов. Эти декораторы удобно использовать с функциями, которые реализуют выше указанные свойства.
Это лучше всего объяснить на примере:
class C: def __init__(self): self._x = None @property def x(self): # В декораторах 'setter' и 'deleter' нужно указывать имя метода-свойства """I'm the 'x' property.""" return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x
Этот код в точности соответствует первому примеру. Обязательно присваивайте дополнительным методам (под декораторами setter
и deleter
) то же имя, что и у исходного метода-свойства.
Так же читайте раздел "Дескрипторы классов в Python".
Изменено в Python 3.5: Добавлена возможность установки строки документации для объекта-свойства