使用typing.NamedTuple作为list元素类型注解失效问题咨询
列表类型标注写法差异解析
第一种写法失效的原因
你写的list[CustomType(...), CustomType(...)]是完全错误的用法:
- 在Python中,类型名后跟
[]是泛型类型注解的语法,比如list[str]用来表示“元素为字符串的列表类型”,而不是用来创建列表实例。 - 你这里把实例放进
list[]里,本质是在试图构造一个不符合规则的泛型类型,最终得到的是list这个类本身(类型为Type[list]),而不是你想要的包含CustomType实例的列表对象,所以类型检查器会提示类型不匹配。
第二种写法可行的原因
test_list: list[CustomType] = list([CustomType(...), CustomType(...)]) 是正确的逻辑:
- 内层的
[CustomType(...), ...]是标准的列表字面量,创建了一个包含CustomType实例的列表对象。 - 调用
list()构造器(这里其实是多余的,直接用字面量就行)把这个列表再包装一次(实际效果和直接用字面量一致)。 - 通过
test_list: list[CustomType]给变量添加类型注解,明确告诉类型检查器这个变量的类型是“元素为CustomType的列表”,和函数test_function的参数类型要求完全匹配,所以不会报错。
更简洁的正确写法
其实不需要调用list()构造器,直接用列表字面量加类型注解即可:
test_list: list[CustomType] = [ CustomType(one="test", two="test2"), CustomType(one="Test", two="Test2") ]
内容的提问来源于stack exchange,提问作者sebwr
相关产品推荐
相关产品推荐

