Функция property() в Python

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Перевод материала подготовлен в рамках онлайн-курса "Python Developer. Basic".

Приглашаем всех желающих на двухдневный онлайн-интенсив «Разработка десктоп-приложения с помощью библиотеки Tkinter». На интенсиве получим начальные навыки бэкенд-разработки на Python, а также начнем разработку десктоп-приложения с помощью библиотеки Tkinter. По итогам 2х дней сможем создать инвестиционное приложение для просмотра актуальной цены на необходимые акции или валюту. Присоединяйтесь!


Функция property() используется для определения свойств в классах.

Метод property() обеспечивает интерфейс для атрибутов экземпляра класса. Он инкапсулирует атрибуты экземпляров и предоставляет свойства, аналогично тому, как это работает в Java и C#.

Метод property() принимает на вход методы get, set и delete, и возвращает объекты класса property.

Вместо метода property() лучше использовать декоратор property (https://www.tutorialsteacher.com/python/property-decorator).

Параметры:

  1. fget: (опционально) Функция для получения значения атрибута. Значение по умолчанию None. 

  2. fset: (опционально) Функция для задания значения атрибута. Значение по умолчанию None.

  3. fdel: (опционально) Функция для удаления значения атрибута. Значение по умолчанию None.

  4. doc: (опционально) Строка, содержащая документацию. Значение по умолчанию None.

Возврат значений:

Возвращает атрибут свойства из заданных геттера, сеттера и функции удаления.

Следующий пример показывает, как создать свойство в Python с помощью функции property().

class person:
    def __init__(self):
        self.__name=''
    def setname(self, name):
        print('setname() called')
        self.__name=name
    def getname(self):
        print('getname() called')
        return self.__name
    name=property(getname, setname)

В примере выше property(getname, setname) возвращает объект свойства и присваивает ему имя. Таким образом, свойство name скрывает приватный экземпляр __name. Доступ к свойству name осуществляется напрямую, но внутри вызывается метод getname() или setname(), как показано ниже.

>>> from person import person
>>> p1=person()
>>> p1.name="Steve"
setname() called
>>> p1.name
getname() called
'Steve'

Как видно выше, метод getname() вызывается автоматически, когда мы обращаемся к свойству name. Аналогично метод setname вызывается, когда мы присваиваем значение свойству name. Он скрывает атрибут класса __name.

Аналогично можно написать метод удаления свойства, как в коде ниже.

class person:
    def __init__(self, name):
        self.__name=name
    def setname(self, name):
        print('setname() called')
        self.__name=name
    def getname(self):
        print('getname() called')
        return self.__name
    def delname(self):
        print('delname() called')
        del self.__name
    # Set property to use get_name, set_name
    # and del_name methods
    name=property(getname, setname, delname)

Функция delname() будет вызвана, когда вы удалите свойство name.

>>> from person import person
>>> p1=person()
>>> p1.name="Steve"
setname() called
>>> del p1.name
delname() called

Таким образом, мы можем определить свойство в классе с помощью функции property() в Python.

Декоратор @property упрощает объявление свойства и позволяет сделать это не вызывая функцию property().


Узнать подробнее о курсе "Python Developer. Basic"

Регистрация на двухдневный онлайн-интенсив «Разработка десктоп-приложения с помощью библиотеки Tkinter»: День 1, День 2.

Источник: https://habr.com/ru/company/otus/blog/557804/


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

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

Подошло время рассказать как была добавлена поддержка поддержка российской криптографии в проект PyKCS11. Всё началось с того, что мне на глаза попалась переписка разработчика проекта Py...
На Хабре уже немало писали про обучающий микрокомпьютер BBC micro:bit, который в 2016 раздали всем британским школьникам, и сейчас он продаётся по $15. С прошлого года появились в продаже...
В прошлой части мы поговорили о советах директору по разработке бизнес-процесса в Битрикс24, сейчас же я постараюсь дать советы руководителям отделов, поскольку по моему опыту почти всегд...
Приветствую всех любителей и знатоков языка программирования Python! Сегодня продолжим разбираться с темой анимаций в кроссплатформенном фреймворке для с поддержкой мультитач — Kivy ...
Я уже больше недели брожу вокруг да около мыслей о написании этой статьи. Правда, основная мотивация сначала была в том, что мне последнее время не хватало контента и хотелось немного разбавить...