DRF ViewSet实现list方法导致Mypy内置list类型被遮蔽的解决方案征集
可行规避方案
显式引用内置
list类型
直接通过Python标准库builtins模块指定使用全局内置的list类型,完全避开类作用域的命名冲突:import builtins def foobar(foo: builtins.list[str], bar: builtins.list[int]) -> builtins.bool: return ...使用类型别名/
typing.List替代
可以在文件开头提前给内置list定义全局别名,或者使用typing模块中的List泛型类型,避免和类内的list方法重名:# 方案A:用typing.List(兼容Python全版本) from typing import List def foobar(foo: List[str], bar: List[int]) -> bool: return ... # 方案B:自定义全局类型别名 type ListType = list def foobar(foo: ListType[str], bar: ListType[int]) -> bool: return ...开启延迟类型注解解析
在文件顶部添加from __future__ import annotations,该配置会将所有类型注解转为字符串形式存储,Mypy会从全局作用域解析类型,不受类内同名方法的遮蔽影响:from __future__ import annotations # 后续注解可以保留原有写法,不需要修改 def foobar(foo: list[str], bar: list[int]) -> bool: return ...使用字符串字面量类型注解
手动将存在冲突的类型注解包裹为字符串,Mypy会自动解析字符串内的类型标识,不会在当前类作用域查找对应名称:def foobar(foo: "list[str]", bar: "list[int]") -> bool: return ...
内容的提问来源于stack exchange,提问作者Mattia Larentis
相关产品推荐
相关产品推荐

