当前位置:  开发笔记 > 编程语言 > 正文

装饰子类方法

如何解决《装饰子类方法》经验,为你挑选了1个好方法。

假设我有一堂课Foo.我写了一个装饰器,deco我想申请一些类的方法Foo.既然Foo从库中导入,我决定将其子类化为Bar.现在,我唯一需要做的就是将装饰器添加到某些方法中Foo.

class Bar(Foo):

    @deco
    def aMethod(self, *args, **kwargs):
        super().aMethod(*args, **kwargs)

由于我不需要修改代码aMethod,有没有更简单的方法来装饰它,而不需要明确地调用super()



1> Martijn Piet..:

你可以Foo通过用装饰版本替换方法来monkeypatch :

Foo.aMethod = deco(Foo.aMethod)

装饰器语法只是语法糖,毕竟deco只是一个可调用的,其结果取代了修饰函数:

@deco
def aMethod(...):
    ....

被有效地翻译成:

def aMethod(....):
    ...
aMethod = deco(aMethod)

或者,如果您仍然喜欢使用子类,请在类的主体中执行相同的操作:

class Bar(Foo):
    aMethod = deco(Foo.aMethod)

在Python 2中,您需要首先解开函数:

Foo.aMethod = deco(Foo.aMethod.im_func)

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有