您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

不使用setter的Python覆盖getter

不使用setter的Python覆盖getter

使用.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。

python 2022/1/1 18:48:09 有351人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶