from inspect import signature
from functools import wraps
def type_assert(func):
"""
类型检查装饰器 通过注解获取类型
"""
@wraps(func)
def wrapper(*args, **kwargs):
sig = signature(func)
arg_dict = sig.bind(*args, **kwargs).arguments
params = sig.parameters
for k, v in arg_dict.items():
param = params[k]
param_annotation = param.annotation
if not isinstance(param_annotation, type):
raise TypeError('param annotation must be type')
if not isinstance(v, param_annotation):
raise TypeError('param {} must be {}'.format(k, param_annotation))
return func(*args, **kwargs)
return wrapper
@type_assert
def sum_(a: int, b: int) -> int:
return a + b
if __name__ == '__main__':
print(sum_(1, 2))
print(sum_('1', 2))
Python实现一个参数类型检查装饰器
于 2023-05-26 14:16:25 首次发布