import inspect
import functools
def typeHints(fn):
@functools.wraps(fn)
def wrap(*args, **kwargs):
sig = inspect.signature(fn)
params = sig.parameters
# 处理kwargs:字典
for k, v in kwargs:
param = params[k]
if param.annotation != inspect._empty and not isinstance(v, param.annotation):
raise TypeError('parameter {} requires {}, but got {}'.format(k, param.annotation, type(v)))
# 处理args:元组
for i, x in enumerate(args):
param = list(params.values())[i]
if param.annotation != inspect._empty and not isinstance(x, param.annotation):
raise TypeError('parameter {} requires {}, but got {}'.format(param.name, param.annotation, type(x)))
ret = fn(*args, **kwargs)
return ret
return wrap
@typeHints
def a
函数动态类型检查的装饰器代码import inspectimport functoolsdef typeHints(fn): @functools.wraps(fn) def wrap(*args, **kwargs): sig = inspect.signature(fn) params = sig.parameters # 处理kwargs:字典 for k, v in kwargs: par