Python中使用的“属性”是什么?

时间:2019-03-09 11:51:32

标签: python python-3.x function methods properties

我正在编辑一个博客文章,并在我的自动完成提示建议一个名为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 个答案:

答案 0 :(得分:1)

您的编辑器提供了一种不同寻常的方式来创建属性。 Here是有关属性的一些信息。

阅读完这些内容后,您将意识到无需在函数内创建getter和setter。编辑器以这种方式执行此操作的原因在于,它具有一个范围,可以在其中定义getter和setter的名称而无需唯一的名称。 IOW,名称隐藏在函数中。

那么,如何将函数(fget,fset,fdel和doc)中定义的对象传递给属性descriptor

请注意,该函数返回locals的结果。因此,该函数的返回值为dict,其中本地对象的名称为键,而本地对象的值为值。

最后,对于self,fget,fset和fdel将被执行,就好像它们是具有该属性的对象的方法一样,因此self引用该对象。