1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| import inspect
def convert(f):
def wrapper(*args, **kwargs):
signature = inspect.signature(f)
params = signature.parameters
bind = signature.bind(*args, **kwargs)
converted_args = []
converted_kwargs = {}
if True:
converted_args = args
converted_kwargs = kwargs
for k, v in bind.arguments.items():
if params[k].annotation != inspect._empty:
v = eval(f"{params[k].annotation.__name__}({v})")
print(type(v), v)
else: # il n'y a pas d'annotation
print(type(v), v)
print()
return f(*converted_args, **converted_kwargs)
return wrapper
@convert
def foobar(a: int, b: int, c: int)-> int:
pass
@convert
def foobar2(a: str, b: bool, c: int)-> int:
pass
if __name__ == "__main__":
foobar(5, "8", True)
foobar2(5, "8", True) |
Partager