我正在研究属性,但无法理解 getter 的用法。
代码:
class A:
def __init__(self,p):
self._p = p
@property
def p(self):
return self._p
@p.setter
def p(self, value):
self._p = value
@p.getter
def p(self):
return self._p
所以,我做了以下
obj = A(10)
print(obj.p)
我得到了以下输出:
10
所以,我想,调用@p.getter 并返回_q 的值。
但是,我在没有 @p.getter 的情况下尝试如下
class A:
def __init__(self,p):
self._p = p
@property
def p(self):
return self._p
@p.setter
def p(self, value):
self._p = value
并做了以下事情
obj = A(10)
print(obj.p)
然后我得到了以下输出:
10
所以,我想知道,@p.getter 在这里的实际用途是什么,当@property 它自己能够给我们 _q 的值时
请您参考如下方法:
@property.getter 装饰器在你想在子类中覆盖父类的 getter 时很有用。它允许您轻松地从父类“复制”属性并仅覆盖 getter,保持 setter 和 deleter 不变。
例子:
class Parent:
@property
def p(self):
return 'parent'
@p.setter
def p(self, value):
print('setting p to', value)
@p.deleter
def p(self):
print('deleting p')
class Child(Parent):
@Parent.p.getter
def p(self):
return 'child'
print(Parent().p) # output: parent
print(Child().p) # output: child
Child().p = 3 # output: setting p to 3
del Child().p # output: deleting p
