如下例子:
foo()
方法没有使用装饰器进行参数校验,这个时候 IDE 的参数智能提示会告诉我参数是 param1, param2
bar()
方法使用了装饰器就行参数校验,这个时候 IDE 的参数智能提示变成了被装饰后的方法 validate
,IDE 告诉我参数是 *args, **kwargs
请问有什么办法可以让使用了装饰器之后 IDE 还是按照原方法的参数进行提示呢?
from functools import wraps
def validate_params(func):
"""
入参格式校验
"""
@wraps(func)
def validate(*args, **kwargs):
invalid_params = [key for key, value in kwargs.items() if value is None]
if invalid_params:
print('%s 参数非法' % str.join(',', invalid_params))
return func(*args, **kwargs)
return validate
def foo(param1, param2):
# 有什么办法可以让使用了装饰器之后 IDE 的参数提示是「 param1, param2 」
pass
@validate_params
def bar(param1, param2):
pass
if __name__ == '__main__':
foo(param1='IDE 智能提示:「 param1, param2 」', param2='没有使用装饰器进行参数校验')
bar(param1='IDE 智能提示:「*args, **kwargs 」', param2=None)
IDE 是 2021.1 版本的 pycharm
如果是单纯按 F1 或者鼠标悬浮在 bar()
方法上面,是可以显示「param1, param2」
但是如果在编码的场景,在 bar() 的括号内使用快捷键 Command + P (windows 应该是 Ctrl + P)出现的参数提示是「*args, **kwargs」
如下例子,键入 bar()
没有任何提示,按快捷键 Command + P 提示的参数是被装饰器装饰后的参数 *args, **kwargs
if __name__ == '__main__':
bar()
如果键入 foo
就有悬浮的智能提示了, 按快捷键 Command + P 也会提示方法的参数是 param1, param2
if __name__ == '__main__':
foo()
1
Namek77 2021-05-28 15:02:55 +08:00
最后说明是哪个 IDE,实测 Pycharm 都会提示 param1, param2
|
2
abersheeran 2021-05-28 15:04:03 +08:00 2
```python
T = typing.TypeVar("T") def validate_params(func: T) -> T: .............. ``` 这么写 Type hint 就行了。 |
3
banjintaohua OP @abersheeran 使用 @abersheeran 2L 老哥的方法解决问题,感谢
|
4
imn1 2021-05-28 16:12:26 +08:00
|