如何为接受可变类型元组并返回其实例的函数添加类型注解?
实现支持任意数量参数的依赖注入类型解析函数
我需要一个用于依赖注入的类型初始化函数,要求支持任意数量的参数。尝试了如下代码,但类型推导无法正常工作:
def resolve[T](t: type[T]) -> T: ... def batch_resolve[*Ts](*deps: type[*Ts]) -> tuple[*Ts]: return tuple(resolve(dep) for dep in deps) class A: ... class B: ... a, b = batch_resolve(A, B) reveal_type(a) # Unknown reveal_type(b) # Unknown
运行后reveal_type(a)和reveal_type(b)都显示为Unknown,类型推导失效。
附言:我了解SQLAlchemy有类似实现,不过他们是通过静态编写重载的方式:
@overload def select( __ent0: _TCCA[_T0], __ent1: _TCCA[_T1], __ent2: _TCCA[_T2], __ent3: _TCCA[_T3], __ent4: _TCCA[_T4], ) -> Select[Tuple[_T0, _T1, _T2, _T3, _T4]]: ... @overload def select( __ent0: _TCCA[_T0], __ent1: _TCCA[_T1], __ent2: _TCCA[_T2], __ent3: _TCCA[_T3], __ent4: _TCCA[_T4], __ent5: _TCCA[_T5], ) -> Select[Tuple[_T0, _T1, _T2, _T3, _T4, _T5]]: ... @overload def select( __ent0: _TCCA[_T0], __ent1: _TCCA[_T1], __ent2: _TCCA[_T2], __ent3: _TCCA[_T3], __ent4: _TCCA[_T4], __ent5: _TCCA[_T5], __ent6: _TCCA[_T6], ) -> Select[Tuple[_T0, _T1, _T2, _T3, _T4, _T5, _T6]]: ... @overload def select( __ent0: _TCCA[_T0], __ent1: _TCCA[_T1], __ent2: _TCCA[_T2], __ent3: _TCCA[_T3], __ent4: _TCCA[_T4], __ent5: _TCCA[_T5], __ent6: _TCCA[_T6], __ent7: _TCCA[_T7], ) -> Select[Tuple[_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7]]: ...
内容的提问来源于stack exchange,提问作者user16776498
相关产品推荐
相关产品推荐

