Pylance提示“ClassVar”不允许在此上下文使用的原因是什么?
报错触发原因
ClassVar仅允许用于类属性的类型标注,这是Python类型标注规范(PEP 526)明确规定的使用限制,不能用于函数参数、实例属性、返回值等其他场景。
你这里的cls是接收类对象的函数参数,不属于类属性标注场景,因此Pylance会抛出不允许在当前上下文使用ClassVar的错误。
修正方案
接收类对象的参数应该用type[类名](Python 3.9及以上原生支持,3.9以下版本可使用typing.Type[类名])来标注,修改后的代码如下:
# Python 3.9+ 版本写法 def overrode_make_stub(cls: type["Emailer"]) -> bool: return not (getattr(cls.make_stub, "_not_overridden", False))
# Python 3.9 以下版本写法 from typing import Type def overrode_make_stub(cls: Type["Emailer"]) -> bool: return not (getattr(cls.make_stub, "_not_overridden", False))
该标注完全匹配你遍历子类时传入类对象的使用场景,修改后即可消除Pylance报错,不影响原有功能逻辑。
内容的提问来源于stack exchange,提问作者MrColes
相关产品推荐
相关产品推荐

