【发布时间】:2021-10-09 01:58:53
【问题描述】:
用户实现了以下函数,该函数是从我的库中调用的。
def run(input_data: Dict[str, Union[Dict, Promise]]):
pass
库负责收集所需的输入数据,输入数据的格式是已知的。在此示例中,输入数据可能如下所示:
input_data = {'config': {}, # type: Dict
'value': 'any_value'} # type: Any or Promise
库使用run函数的类型提示信息来确定用户是否期望Promise对象作为启用实际对象延迟加载的值,或者用户是否期望任意类型的实际内存中对象.因此,基于input_data(它包含Promise)的上述类型提示,库创建并输入Promise 对象,而不是将实际对象加载到内存中并输入它。
但是,如果用户会写
def run(input_data: Dict[str, Union[Dict, AnyOtherType]]):
pass
实际对象将被加载到内存中并转发到run 方法。
现在,当我将input_data 的结构定义为dataclass 而不是dict 时,如何实现相同的功能。例如。数据类看起来像:
@dataclass
class Data:
config: Dict
value: Union[Any, Promise]
value 属性是任何类型,但我必须根据input_data 的类型提示知道它是否属于Promise 类型。在这种情况下,带有 input_data 类型提示的 run 方法如何查看,以便我可以查看 input_data.value 实际上是否属于 Promise 类型?
这样的事情显然行不通:
def run(input_data: Data[value: Promise]):
pass
只有写作
def run(input_data: Data):
pass
不告诉我input_data.value 是否属于Promise 类型。
有没有办法向自定义 Data 类型提示添加额外信息,以注释此 Data 实例的 value 属性为 Promise 类型?
感谢您的见解:)
【问题讨论】:
标签: python type-hinting python-typing python-dataclasses