如何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] 删除。
我来说两句