Свойство Python ()

Конструкция property () возвращает атрибут свойства.

Синтаксис property():

 свойство (fget = None, fset = None, fdel = None, doc = None)

Рекомендуемая литература: Python @property: как его использовать и почему?

property () Параметры

property()Принимает четыре дополнительных параметров:

  • fget (необязательно) - Функция для получения значения атрибута. По умолчанию None.
  • fset (необязательно) - Функция для установки значения атрибута. По умолчанию None.
  • fdel (необязательно) - Функция для удаления значения атрибута. По умолчанию None.
  • doc (необязательно) - строка, содержащая документацию (docstring) для атрибута. По умолчанию None.

Возвращаемое значение из свойства ()

property() возвращает атрибут свойства из заданного средства получения, установки и удаления.

  • Если аргументы не указаны, property()возвращает атрибут базового свойства, который не содержит никаких средств получения, установки или удаления.
  • Если doc не предоставлен, 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

Вывод

 Получение имени Имя: Адам Установка имени для Джона Удаление имени 

Здесь _name используется в качестве частной переменной для хранения имени Person.

Также устанавливаем:

  • метод get_name()получения для получения имени человека,
  • метод set_name()установки для установки имени человека,
  • метод del_name()удаления, чтобы удалить имя человека.

Теперь мы устанавливаем новое имя атрибута свойства, вызывая property()метод.

Как показано в программе, обращение к p.nameвнутренним вызовам get_name()как получателю, set_name()установщику и del_name()как удалителю через печатный вывод, присутствующий внутри методов.

Пример 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перед получением, как показано в программе.

Затем мы используем имя атрибута, чтобы указать установщик и удалитель.

Это делается с помощью @name.setterметода установки и @name.deleterметода удаления.

Обратите внимание: мы использовали один и тот же метод name()с разными определениями для определения получателя, установщика и удалителя.

Теперь всякий раз, когда мы используем p.name, он внутренне вызывает соответствующий метод получения, установки и удаления, как показано в распечатанном выводе внутри метода.

Интересные статьи...