在Python3.8中,创建了一个用于创建多态函数的新装饰器@singledispatchmethod,它根据提供的类型提示将Python重定向到方法的正确实现
但是,我似乎无法使用输入模块中的复杂类型,请告诉我我的示例有什么问题
from typing import List
from functools import singledispatchmethod
class test:
@singledispatchmethod
def a(self, a):
return NotImplemented
@a.register
def _(self, a : str):
print(type(a))
# Uncomment to run the example
# @a.register
# def _(self, a: List[str]):
# print(type(a))
def b(self, b: List[str]):
print(type(b))
test().a(["A"])
test().b(["A"])
若第二个下划线函数的注释未注释,则a函数会发生以下错误,即使b函数不会发生此错误:
TypeError: Invalid annotation for 'a'. typing.List[str] is not a class.
我做错了什么
从评论中,听起来可能有potential changes到
singledispatchmethod
,但是如果您对允许分派和键入都起作用的可用解决方案感兴趣,这里有一些选项:list
注册重载,然后为重载(see related answer)提供更具体的类型提示李>typing
类型李>选项1:使用
list
注册并添加更具体的重载类型提示选项2:使用
multimethod
相关问题 更多 >
编程相关推荐