Конструкція property () повертає атрибут property.
Синтаксис property()
:
властивість (fget = None, fset = None, fdel = None, doc = None)
Рекомендоване читання: Python @property: як ним користуватися та чому?
Параметри властивості ()
property()
Приймає чотири додаткових параметрів:
- fget (необов’язково) - Функція отримання значення атрибута. За замовчуванням
None
. - fset (необов’язково) - Функція встановлення значення атрибута. За замовчуванням
None
. - fdel (необов’язково) - Функція видалення значення атрибута. За замовчуванням
None
. - doc (необов’язково) - рядок, що містить документацію (рядок документа) для атрибута. За замовчуванням
None
.
Повернене значення з властивості ()
property()
повертає атрибут властивості із заданого геттера, сеттера та делетера.
- Якщо аргументів не вказано,
property()
повертає атрибут базової властивості, який не містить жодного геттера, сеттера чи видаляча. - Якщо документ не надається,
property()
береться документ рядка функції отримання.
Приклад 1: Створіть атрибут за допомогою getter, setter та deleter
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
Вихідні дані
Отримання імені Ім'я: Адам Встановлення імені Джон Видалення імені
Тут _name використовується як приватна змінна для зберігання імені Person.
Ми також встановили:
- метод отримання,
get_name()
щоб отримати ім'я людини, - метод
set_name()
встановлення для встановлення імені особи, - метод
del_name()
видалення для видалення імені особи.
Тепер ми встановлюємо нову назву атрибута властивості, викликаючи property()
метод.
Як показано в програмі, посилання на p.name
внутрішні виклики get_name()
як getter, set_name()
setter і del_name()
deleter через друкований вивід, присутній усередині методів.
Приклад 2: Використання @property декоратора
Замість того, щоб використовувати property()
, ви можете використовувати декоратор Python @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()
метод також є атрибутом Person. Це робиться за допомогою @property
методу getter, як показано в програмі.
Далі ми використовуємо ім’я атрибута, щоб вказати сеттер і видаляч.
Це робиться за допомогою @name.setter
методу встановлення та @name.deleter
методу видалення.
Зверніть увагу, ми використовували один і той же метод name()
з різними визначеннями для визначення геттера, сеттера та делетера.
Тепер, щоразу, коли ми використовуємо p.name
, він внутрішньо викликає відповідний геттер, сеттер і делетер, як показано на друкованому виводі, що знаходиться всередині методу.