我时不时地发现自己定义一个带有参数的函数,该参数可以是类型的单个实例,也可以是同一类型的序列。当类型本身已经很复杂时,类型提示可能很快就会变得模糊。
而不是类似的东西
my_dicts: Union[Dict[str, int], Sequence[Dict[str, int]]]
Run Code Online (Sandbox Code Playgroud)
我想定义一个快捷方式,这样我就可以输入
my_dicts: SingleOrSequence[Dict[str, int]]
Run Code Online (Sandbox Code Playgroud)
我该如何以最Pythonic的方式解决这个问题?另请记住,为了与其他类型保持一致,调用签名应类似于上面的内容,即指定自定义类型名称并直接用方括号传递包含的类型。
我能想到的最好的看起来像这样:
import typing
class SingleOrSequenceClass():
@staticmethod
def __getitem__(typ):
return typing.Union[typ, typing.Sequence[typ]]
SingleOrSequence = SingleOrSequenceClass()
Run Code Online (Sandbox Code Playgroud)
这确实有效,但特别是必须实例化 SingleOrSequenceClass 并不适合我。关于如何改进这一点有什么建议吗?打字模块本身是否为此提供了任何优雅的解决方案?