Python 3.x Mypy:如何为builder函数指定返回和输入类型?
我想在Python中使用类型注释生成某种生成器函数Python 3.x Mypy:如何为builder函数指定返回和输入类型?,python-3.x,typing,mypy,Python 3.x,Typing,Mypy,我想在Python中使用类型注释生成某种生成器函数 def build_对象(目标类:TargetType)->ReturnType: 返回目标_类() 如何正确指定TargetType和ReturnType? 到目前为止,我有一个选择,但我不知道这是否正确: 从键入导入类型,TypeVar TargetObjType=TypeVar(“TargetObjType”) def生成对象(目标类:类型[TargetObjType])->TargetObjType: 返回目标_类() 如果我将参数
def build_对象(目标类:TargetType)->ReturnType:
返回目标_类()
如何正确指定TargetType
和ReturnType
?
到目前为止,我有一个选择,但我不知道这是否正确:
从键入导入类型,TypeVar
TargetObjType=TypeVar(“TargetObjType”)
def生成对象(目标类:类型[TargetObjType])->TargetObjType:
返回目标_类()
如果我将参数传递到类构造函数中,则mypy出现错误:
从键入导入类型,TypeVar
TargetObjType=TypeVar(“TargetObjType”)
def生成对象(目标类:类型[TargetObjType])->TargetObjType:
返回目标_类(1)#mypy错误
有没有一种方法可以在不使用
#type:ignore
的情况下修复此问题?您通常只需调用泛型类型T,以节省键入时间,但这通常看起来没问题-您有理由不这样想吗?MyPy或其他工具的投诉?假设您不处理任何参数,Callable[[],t]
将是target\u class
@jornsharpe的另一个选项,谢谢您,仍然在测试这种方法。我对键入有点困惑。泛型,但现在似乎很清楚了。谢谢,我将尝试发布更新。@jonrsharpe,添加了一个更新我想问题是:如何知道target\u类
将接受哪些参数?正如MyPy告诉您的那样,基本对象不接受任何内容,因此您需要更具体地说明构建对象可以接受的范围。是的,我认为您使用可调用[…,t]
的选项更合适。可调用[…,T]
的问题在于,在这个方法之外使用它不是非常优雅的类型,而且它并没有真正指定我需要的是一个类,而不仅仅是一个返回值为T
的对象的函数。我们可以说基本上是一样的。但是Type[T]
无法指定Type
构造函数可以接受任何参数,对吗?