Конструкција својства () враћа својство својства.
Синтакса property()
је:
својство (фгет = Ноне, фсет = Ноне, фдел = Ноне, доц = Ноне)
Препоручено читање: Питхон @проперти: Како га користити и зашто?
параметри својства ()
property()
Потребно четири опционе параметре:
- фгет (опционално) - функција за добијање вредности атрибута. Подразумевано
None
. - фсет (опционално) - функција за подешавање вредности атрибута. Подразумевано
None
. - фдел (опционално) - Функција за брисање вредности атрибута. Подразумевано
None
. - доц (опционално) - Низ који садржи документацију (доцстринг) за атрибут. Подразумевано
None
.
Повратна вредност из својства ()
property()
враћа својство својства од датог гетера, постављача и брисача.
- Ако се не дају аргументи,
property()
враћа основни атрибут својства који не садржи геттер, сеттер или делетер. - Ако документ није наведен,
property()
узима доцстринг функције гетера.
Пример 1: Креирајте атрибут помоћу гетера, постављача и брисача
class Person: def __init__(self, name): self._name = name def get_name(self): print('Getting name') return self._name def set_name(self, value): print('Setting name to ' + value) self._name = value def del_name(self): print('Deleting name') del self._name # Set property to use get_name, set_name # and del_name methods name = property(get_name, set_name, del_name, 'Name property') p = Person('Adam') print(p.name) p.name = 'John' del p.name
Оутпут
Добивање имена Име је: Адам Постављање имена на Јохн Брисање имена
Овде се _наме користи као приватна променљива за чување имена особе.
Такође смо поставили:
- геттер метода
get_name()
за добијање имена особе, - метода
set_name()
постављача за постављање имена особе, - методом
del_name()
брисања за брисање имена особе.
Сада постављамо ново име атрибута својства позивањем property()
методе.
Као што је приказано у програму, позивање p.name
интерних позива get_name()
као гетера, set_name()
постављача и del_name()
брисача кроз исписани излаз присутан унутар метода.
Пример 2: Коришћење @проперти декоратера
Уместо да користите property()
, помоћу декоратора Питхон @property
можете доделити гетер, постављач и брисач.
class Person: def __init__(self, name): self._name = name @property def name(self): print('Getting name') return self._name @name.setter def name(self, value): print('Setting name to ' + value) self._name = value @name.deleter def name(self): print('Deleting name') del self._name p = Person('Adam') print('The name is:', p.name) p.name = 'John' del p.name
Оутпут
Добивање имена Име је: Адам Постављање имена на Јохн Брисање имена
Овде смо, уместо да користимо property()
, користили @property
декоратор.
Прво, прецизирамо да је name()
метода такође особина особе. Ово се постиже коришћењем @property
методе пре гетера, као што је приказано у програму.
Даље користимо име атрибута да одредимо постављач и брисач.
То се постиже коришћењем @name.setter
за методу постављања и @name.deleter
за методу брисања.
Обавештење, користили смо исти метод name()
са различитим дефиницијама за дефинисање гетера, постављача и брисача.
Сада, кад год користимо p.name
, интерно позива одговарајући геттер, сеттер и делетер, као што приказује исписан излаз који се налази унутар методе.