Python 类型为的singledispatchmethod

Python 类型为的singledispatchmethod,python,python-3.x,python-decorators,Python,Python 3.x,Python Decorators,在Python3.8中,创建了一个用于创建多态函数的新装饰器@singledispatchmethod,它根据提供的类型提示将Python重定向到方法的正确实现 但是,我似乎无法使用输入模块中的复杂类型,请告诉我我的示例有什么问题 输入导入列表中的 从functools导入singledispatchmethod 课堂测试: @单一分派方法 def a(自我,a): 返回未执行 @a、 登记册 定义(self,a:str): 印刷品(a型) #取消注释以运行示例 #@a.register #定义

在Python3.8中,创建了一个用于创建多态函数的新装饰器@singledispatchmethod,它根据提供的类型提示将Python重定向到方法的正确实现

但是,我似乎无法使用输入模块中的复杂类型,请告诉我我的示例有什么问题

输入导入列表中的

从functools导入singledispatchmethod
课堂测试:
@单一分派方法
def a(自我,a):
返回未执行
@a、 登记册
定义(self,a:str):
印刷品(a型)
#取消注释以运行示例
#@a.register
#定义(self,a:List[str]):
#印刷品(a型)
定义b(自我,b:列表[str]):
印刷品(b类)
test().a([“a”])
test().b([“A”])
若第二个下划线函数的注释未注释,则a函数会发生以下错误,即使b函数不会发生此错误:

TypeError: Invalid annotation for 'a'. typing.List[str] is not a class.

我做错了什么?

看起来像是
singledispatch
定义中的另一个bug。
register
方法显式检查参数的注释是否是
类型的实例,而不是类型提示的情况。@chepner您知道这是否在任何地方的错误跟踪器中,或者OP刚刚发现了一个新的stdlib错误吗?可能是这样?我认为这个问题包括这一点。函数注释始终被允许是任意表达式,即使它们实际上始终是类型。PEP-484开始要求注释类似于类型,但
键入
模块是第一个引入非类型对象的模块
singledispatch
似乎跟不上这些发展。感谢您的参考资料,至少我知道在这种情况下我没有做错什么