仅 使用.getter
原始属性的装饰器:
class superhuman(human):
@human.name.getter
def name(self):
return 'super ' + self._name
示范:
>>> class superhuman(human):
... @human.name.getter
... def name(self):
... return 'super ' + self._name
...
>>> s = superhuman('john')
>>> print s.name
super john
>>> s.name = 'jack'
>>> print s.name
super jack
在property
描述对象就是 一个 对象,尽管它可以有多个与之相关的方法(吸气,setter和删除器)。现有描述符提供的.getter
,.setter
和.deleter
装饰器函数将property
返回描述符本身的副本,并替换该特定方法。
因此,在human
基类中发生的情况是,首先使用装饰器 创建 了描述符@property
,然后用@name.setter
语法同时具有getter和setter的描述符替换了该描述符。之所以可行,是因为python装饰器用相同的名称替换了原始装饰函数,它基本上会执行name = name.setter(name)
。请参见@property装饰器如何工作?有关所有工作原理的详细信息。
在您的子类中,您只需使用该技巧即可创建描述符的新副本,而只需替换getter。