【发布时间】:2018-02-08 00:04:04
【问题描述】:
我正在尝试编写一个函数装饰器,它使用 Python 3.6 类型提示来检查参数字典是否尊重类型提示,如果没有明确说明问题,则引发错误,以用于 HTTP API。
问题是当函数有一个使用 Union 类型的参数时,我无法在运行时检查变量。
比如我有这个功能
from typing import Union
def bark(myname: str, descr: Union[int, str], mynum: int = 3) -> str:
return descr + myname * mynum
我能做到:
isinstance('Arnold', bark.__annotations__['myname'])
但不是:
isinstance(3, bark.__annotations__['descr'])
因为Union 不能与isinstance 或issubclass 一起使用。
我找不到使用类型对象检查它的方法。
我尝试自己实现检查,但是当bark.__annotations__['descr'] 在 REPL 中显示为 typing.Union[int, str] 时,如果不使用检查 bark.__annotations__['descr'].__repr__() 的丑陋黑客,我无法在运行时访问类型列表。
是否有适当的方法来访问这些信息?还是故意让它在运行时不易访问?
【问题讨论】:
标签: python annotations python-3.6 typechecking