【发布时间】:2021-11-21 23:48:41
【问题描述】:
如何以类似于isinstance 的方式创建一个缩小变量类型(用于静态类型检查器)的函数?
例如,ComplexTypeAssertion 只是在运行时缩小类型,而不是用于静态检查:
def MyFunction(myData: object) -> object:
if isinstance(myData, list):
reveal_type(myData) # Revealed type is 'builtins.list[Any]'
if ComplexTypeAssertion(myData): # <<< How to make MyPy understand this?
reveal_type(myData) # Revealed type is 'builtins.object'
def ComplexTypeAssertion(data: object) -> bool:
return isinstance(data, list) and all(isinstance(value, str) for value in data)
我如何定义ComplexTypeAssertion 以便静态分析工具能够理解该类型?
显然,这是一个玩具示例,现实生活中的示例会更复杂。在我想断言某些数据遵循TypedDict 构造或其他类型构造的情况下,这将非常有用。
【问题讨论】:
标签: python type-hinting mypy python-typing