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

Python类方法装饰器

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

我为类方法编写了一个装饰器

def decor(method):
    def wrapped(self, *args, **kwargs):
        return method(self, *args, **kwargs)
    # [*]
    return wrapped

我想用这个:

class A(metaclass=mymetaclass):
    @decor
    def meth(self):
        pass

我如何在装饰器中添加方法/变量到具有装饰方法的类?我需要它做近[*].里面裹着我可以写self.__class__,但在这做什么?



1> Serge Balles..:

我无法想象一种满足这种要求的方法,因为decor函数只接收一个对包含类一无所知的函数对象.

我能想象的唯一解决方法是使用参数化装饰器并将其传递给正在装饰的类

def decor(cls):
    def wrapper(method):
        def wrapped(self, *args, **kwargs):
            return self.method(*args, **kwargs)
        print method   # only a function object here
        return wrapped
    print cls  # here we get the class and can manipulate it
    return wrapper

class A
    @decor(A)
    def method(self):
        pass

或者,你可以装饰类本身:

def cdecor(cls):
    print 'Decorating', cls  # here we get the class and can manipulate it
    return cls

@cdecor
class B:
    def meth(self):
        pass

得到:

Decorating __main__.B

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