Властивість Python ()

Конструкція 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, він внутрішньо викликає відповідний геттер, сеттер і делетер, як показано на друкованому виводі, що знаходиться всередині методу.

Цікаві статті...