使用
@x.getter
decorator告诉Python下面的方法是属性的预期getter。
你说得对,在你举的例子中,它不是很有用。这个
@property
decorator做同样的工作,一次定义属性。在单个类定义中确实没有理由同时使用这两者。
但是,也许您想重写子类中的getter方法?
class Foo:
def __init__(self, x):
self._x = x
@property
def x(self):
print('Attribute `self.x` is a property.')
return self._x
class Bar(Foo):
count: int = 0
@Foo.x.getter
def x(self):
Bar.count += 1
print(f'Getting Bar property `x` ({Bar.count})')
return self._x
foo = Foo(10)
print(foo.x)
bar = Bar(10)
print(bar.x)
print(bar.x)
Attribute `self.x` is a property.
10
Getting Bar property `x` (1)
10
Getting Bar property `x` (2)
10
在其他几个用例中,显式定义getter是有意义的,即使在基本用例中您只使用getter
@财产
和
@attr.setter
计数器只是为了说明一个简单的原因,说明为什么您可能希望修改getter行为,即使它不修改属性的实际值。