类装饰器函数示例

格特·库肯斯

如何self.f使用这样的类装饰器分配给函数@Decorator(t=3)

#!/usr/bin/env python3

class Decorator:
    def __init__(self, f=None, *, t=2):
        if f is None:
            self.t = t
            self.f = None # <=== this line need to be ?
        else:
            self.t = t
            self.f = f
    def __call__(self, *args, **kwargs):
        print(f'{self.f = !r}')
        for _ in range(self.t):
            self.f(*args, **kwargs)

@Decorator
def hello4(name):
    print(f'Hello {name}')

if __name__ == '__main__':
    hello4("gert")

@Decorator(t=3)
def hello6(name):
    print(f'Hello {name}')

if __name__ == '__main__':
    hello6("gert")

我想达到与此相同的效果,但随后使用 Class 装饰器

def decorator(f=None, *, t=2):
    def decorator(f):
        def repeat(*args, **kwargs):
            for _ in range(t):
                value = f(*args, **kwargs)
            return value
        return repeat

    if f is None:
        print(f'{f = !r}')
        return decorator
    else:
        print(f'{f = !r}')
        return decorator(f)

@decorator(t=3)
def hello1(name):
    print(f'Hello {name}')

if __name__ == '__main__':
    hello1("gert")

@decorator
def hello5(name):
    print(f'Hello {name}')

if __name__ == '__main__':
    hello5("gert")
纽扣

这是你需要的吗?

不知道是不是我的python版本问题

我不知道是什么!r,我不能使用它。

所以我删除了 !r

class Decorator:
    def __init__(self, f=None, *, t=2):
        if f is None:
            self.t = t
            self.f = None  # <=== this line need to be ?
        else:
            self.t = t
            self.f = f

    def __call__(self, fun):
        def repeat(*args, **kwargs):
            for _ in range(self.t):
                value = self.f(*args, **kwargs)
            return value
        if self.f is None:
            self.f = fun
            return repeat
        else:
            return repeat(fun)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章