仅 使用
.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.namesuper john>>> s.name = 'jack'>>> print s.namesuper jack
在
property描述对象就是 一个
对象,尽管它可以有多个与之相关的方法(吸气,setter和删除器)。现有描述符提供的
.getter,
.setter和
.deleter装饰器函数将
property返回描述符本身的副本,并替换该特定方法。
因此,在
human基类中发生的情况是,首先使用装饰器 创建
了描述符
@property,然后用
@name.setter语法同时具有getter和setter的描述符替换了该描述符。之所以可行,是因为python装饰器用相同的名称替换了原始装饰函数,它基本上会执行
name=name.setter(name)。请参见@property装饰器如何工作?有关所有工作原理的详细信息。
在您的子类中,您只需使用该技巧即可创建描述符的新副本,而只需替换getter。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)