from functools import wraps
class SomeDecorator:
def __init__(self, value):
print("Decorator init called")
self.value = value
def __call__(self, func):
@wraps(func)
def inner(*args, **kwargs):
value = self.value
a = kwargs.get("a")
if isinstance(value, list):
if a> 10:
value = str
else:
value = float
print(value(a))
return inner
"____________________________________________________________"
@SomeDecorator(value=[float, str])
def f1(*args, **kwargs):
return "f1"
f1(a=5)
f1(a=12)
f1(a=5)
f1(a=15)
ZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCgpjbGFzcyBTb21lRGVjb3JhdG9yOgoJCglkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgoJCXByaW50KCJEZWNvcmF0b3IgaW5pdCBjYWxsZWQiKQoJCXNlbGYudmFsdWUgPSB2YWx1ZQoJCQoJZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmMpOgoJCUB3cmFwcyhmdW5jKQoJCWRlZiBpbm5lcigqYXJncywgKiprd2FyZ3MpOgoJCQl2YWx1ZSA9IHNlbGYudmFsdWUKCQkJYSA9IGt3YXJncy5nZXQoImEiKQoJCQlpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKCQkJCWlmIGE+IDEwOgoJCQkJCXZhbHVlID0gc3RyCgkJCQllbHNlOgoJCQkJCXZhbHVlID0gZmxvYXQKCQkJcHJpbnQodmFsdWUoYSkpCgkJcmV0dXJuIGlubmVyCgkJCiJfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18iCgpAU29tZURlY29yYXRvcih2YWx1ZT1bZmxvYXQsIHN0cl0pCmRlZiBmMSgqYXJncywgKiprd2FyZ3MpOgoJcmV0dXJuICJmMSIKCQoKCmYxKGE9NSkKZjEoYT0xMikKZjEoYT01KQpmMShhPTE1KQ==