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):
a = kwargs.get("a")
if isinstance(self.value, list):
if a> 10:
self.value = str
else:
self.value = float
print(self.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)
ZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCgpjbGFzcyBTb21lRGVjb3JhdG9yOgoJCglkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgoJCXByaW50KCJEZWNvcmF0b3IgaW5pdCBjYWxsZWQiKQoJCXNlbGYudmFsdWUgPSB2YWx1ZQoJCQoJZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmMpOgoJCUB3cmFwcyhmdW5jKQoJCWRlZiBpbm5lcigqYXJncywgKiprd2FyZ3MpOgoJCQlhID0ga3dhcmdzLmdldCgiYSIpCgkJCWlmIGlzaW5zdGFuY2Uoc2VsZi52YWx1ZSwgbGlzdCk6CgkJCQlpZiBhPiAxMDoKCQkJCQlzZWxmLnZhbHVlID0gc3RyCgkJCQllbHNlOgoJCQkJCXNlbGYudmFsdWUgPSBmbG9hdAoJCQlwcmludChzZWxmLnZhbHVlKGEpKQoJCXJldHVybiBpbm5lcgoJCQoiX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIgoKQFNvbWVEZWNvcmF0b3IodmFsdWU9W2Zsb2F0LCBzdHJdKQpkZWYgZjEoKmFyZ3MsICoqa3dhcmdzKToKCXJldHVybiAiZjEiCgkKCgpmMShhPTUpCmYxKGE9MTIpCmYxKGE9NSkKZjEoYT0xNSk=