实例化空类型提示列表



我有以下代码:

from typing import List, NewType
MultiList = NewType("MultiList", List[List[int]])
def myfunc():
multi: MultiList = []
# More stuff here

代码工作得很好,这只是我的IDE (PyCharm)不喜欢multi的实例化为空列表,我得到这个错误:

"预期类型'MultiList',得到'list[list[int]]'而不是'

我的意思是,MultiList一个list[list[int]],所以我真的不知道为什么它在抱怨。除非是因为列表是空的,但这对我来说也没有多大意义。

这不是世界末日,代码工作得很好,我只是想知道为什么它被标记为错误。

typing.NewType的全部目的是将一种类型与另一种类型区分开来,并将其视为一个子类型。您将其注释为MultiList,它被视为list的子类型,因此分配list实例是错误的

您需要正确实例化MultiList。例子:

def myfunc():
multi: MultiList = MultiList([])

如果您想要一个类型别名,那么您不应该使用NewType,而应该使用TypeAlias:

from typing import TypeAlias
MultiList: TypeAlias = list[list[int]]
def myfunc():
multi: MultiList = []

p:除非你使用的是过时的Python版本,否则你应该使用标准的泛型别名类型,即list而不是typing.List

如果你的意思是"列表的列表",那么就不要使用NewType:

MultiList = List[List[int]]

NewType适用于如果你不希望将int型列表的任意列表视为MultiList。对于NewType,静态类型检查器只会在显式调用MultiList时将对象视为MultiList:

MultiList = NewType("MultiList", List[List[int]])
multi: MultiList = MultiList([])

最新更新