Для чего используется «свойство» в Python? - PullRequest
0 голосов
/ 09 марта 2019

Я редактировал пост в блоге и начал набирать слово property, когда мое автозаполнение предложило завершение под названием new Property, как ни странно, я посмотрел его и обнаружил, что это происходит из пакета автозаполнения Python.

Я нажал его, и появился этот код:

def foo():
  doc = "The  property."

  def fget(self):
    return self._

  def fset(self, value):
    self._ = value

  def fdel(self):
    del self._

  return locals()

 = property(**())

Я набрал Grape там, где были курсор (и), поэтому я получил следующее:

def Grape():
  doc = "The Grape property."

  def fget(self):
    return self._Grape

  def fset(self, value):
    self._Grape = value

  def fdel(self):
    del self._Grape

  return locals()

Grape = property(**Grape())

Глядя на код, я вижу, что он создает локальную переменную с именем doc, но, похоже, ничего с ней не делает.

Также создаются три функции: одна возвращает self._Grape, другая добавляет новое свойство к self._Grape, а другая удаляет self._Grape.

Откуда взялись self & _Grape? Это какой-то класс, например «псевдокласс» ?

Где, почему и как используются «новые свойства» ?

1 Ответ

1 голос
/ 09 марта 2019

Ваш редактор предоставляет необычный способ создания собственности. Здесь - некоторая информация о свойствах.

Прочитав это, вы поймете, что нет необходимости создавать геттер и сеттер внутри функции. Причина, по которой редактор делает это таким образом, заключается в том, что у него есть область, в которой можно определить имена методов получения и установки без использования уникальных имен. IOW, имена скрыты в функции.

Итак, как объекты, определенные в функции (fget, fset, fdel & doc), передаются свойству дескриптор ?

Обратите внимание, что функция возвращает результат locals . Таким образом, возвращаемое значение функции - dict с именами локальных объектов в качестве ключей и локальных объектов в качестве значений.

Наконец, что касается self, fget, fset и fdel будут выполняться так, как если бы они были методами объекта, обладающего свойством, поэтому self ссылается на этот объект.

...