如何装饰父类并使子类使用它?python

2024-09-27 00:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要的是创建一个类decorator来装饰一个类,并在子类上工作。在

想象一下这个班级:

class CustomBaseTest(TransactionTestCase):
    def __init__(self, *args, **kwargs):
        ...

    def more_custom_helpers(self):
        ...

真正的考验是:

^{pr2}$

我想要的是在CustomBaseTest中使用一个decorator,它查找所有以“decorate\u this”开头的方法,并在之后和之前执行自定义代码。我已经有了装修师,像这样:

def class_decorator(klass):
    is_method_test = lambda m: not m.startswith('_') and m.startswith('decorate_this_') and isinstance(getattr(klass, m), MethodType)
    test_methods = filter(is_method_test, dir(klass))

    for method_name in test_methods:
        class_method = getattr(klass, method_name)

        def helper(mname, method):
            @wraps(method)
            ... some logic here
            retval = method(*a, **kw)
            ... more logic here
            return retval
        return wrapper

        fn = MethodType(helper(method_name, class_method), None, klass)
        setattr(klass, method_name, fn)
    return klass

你知道有没有可能做到这一点?怎么办?在

谢谢!!!在


Tags: nametestselfreturnisdefmoredecorator
1条回答
网友
1楼 · 发布于 2024-09-27 00:21:40

感谢@Markku和@BrenBarn。在

这是解决办法。在

首先,我们有一个简单的装饰:

from functools import wraps
def my_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        # do some stuff
        retval = func(*args, **kwargs)
        # do more stuff
        return retval
    return wrapper

元类:

^{pr2}$

这对我很有效!!如果我弄错了,我会提前道歉。在

相关问题 更多 >

    热门问题