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
"____________________________________________________________"
dec = SomeDecorator(value=[float, str])
def f1(*args, **kwargs):
return "f1"
f1 = dec(f1)
f1(a=5)
f1(a=12)
f1(a=5)
f1(a=15)
ZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCgpjbGFzcyBTb21lRGVjb3JhdG9yOgoJCglkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgoJCXByaW50KCJEZWNvcmF0b3IgaW5pdCBjYWxsZWQiKQoJCXNlbGYudmFsdWUgPSB2YWx1ZQoJCQoJZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmMpOgoJCUB3cmFwcyhmdW5jKQoJCWRlZiBpbm5lcigqYXJncywgKiprd2FyZ3MpOgoJCQlhID0ga3dhcmdzLmdldCgiYSIpCgkJCWlmIGlzaW5zdGFuY2Uoc2VsZi52YWx1ZSwgbGlzdCk6CgkJCQlpZiBhPiAxMDoKCQkJCQlzZWxmLnZhbHVlID0gc3RyCgkJCQllbHNlOgoJCQkJCXNlbGYudmFsdWUgPSBmbG9hdAoJCQlwcmludChzZWxmLnZhbHVlKGEpKQoJCXJldHVybiBpbm5lcgoJCQoiX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIgoKZGVjID0gU29tZURlY29yYXRvcih2YWx1ZT1bZmxvYXQsIHN0cl0pCmRlZiBmMSgqYXJncywgKiprd2FyZ3MpOgoJcmV0dXJuICJmMSIKZjEgPSBkZWMoZjEpCQoKCmYxKGE9NSkKZjEoYT0xMikKZjEoYT01KQpmMShhPTE1KQ==