我尝试在python文档和其他博客中研究此问题,但找不到满意的答案。所以我们开始。在以下代码中:
class C:
_x = "Hola"
@property
def X(self): return self._x
@X.getter
def X(self): return self._x
我知道第一个装饰器@property
定义了该属性。 @X.getter
在这种情况下是否多余?这两种方法什么时候必要?
答案 0 :(得分:3)
@property
创建一个带有修饰函数的属性作为其getter(并以修饰函数的文档字符串作为其docstring)。
@X.getter
(其中X
是现有属性)使用旧属性的setter,deleter和docstring创建一个 new 属性,但将修饰后的功能作为其getter
getter
主要是为了与setter
和deleter
对称,它们分别使用新的设置器或删除器创建属性的副本。这些方法的预期用例看起来像
class Whatever:
@property
def blah(self):
"docstring for blah"
# logic to get property
@blah.setter(self, value)
# logic to set property
@blah.deleter(self)
# logic to delete property
其中通过使用@blah.setter
和@blah.deleter
用getter,setter和deleter构建属性,并且每个修饰的函数定义都用新的,更完整的属性替换了旧属性。 / p>
您正在做的事情非常不寻常,也没有任何意义。您使用一个吸气剂为X
属性创建一个属性,然后使用@X.getter
将其替换为具有不同的等效吸气剂的另一个属性(但旧的吸气剂的文档字符串,如果两个getter函数都没有None
文档字符串)。这样做是没有意义的。
答案 1 :(得分:-1)
在这种情况下,@ X.getter是否多余?这两种方法什么时候必要?
吸气剂是完全多余且不必要的。重新访问X的通常用法是配置设置程序和删除程序,已经通过@property
配置了getter。
答案 2 :(得分:-2)
属性对象具有可用作的getter,setter和deleter方法 装饰器,使用相应的属性创建属性的副本 访问器功能设置为修饰功能。这是最好的 举例说明: