如何纠正Pylance将带converter的attrs.field识别为函数的问题
解决Pylance将带converter的attrs类属性识别为函数的问题
在Python 3.8.13、Pylance 2023.12.100环境下,给attrs的field指定converter参数后,Pylance会误把类属性识别成函数,可通过以下几种方式修复:
显式在
field中指定type参数
虽然已经给属性加了类型注解,但额外在field里显式声明type,能帮助Pylance正确推断属性类型:from typing import Any from attrs import define, field def asstr(a: Any) -> str: return str(a) @define class Test: """Test class""" x: str = field(converter=asstr, type=str) def test(self): """测试方法""" self.x # Pylance会正确识别为str类型变量升级Pylance到最新版本
你当前使用的Pylance版本(2023.12.100)可能存在对attrs转换器场景的类型推断bug,后续版本大概率修复了这个问题,直接升级到最新版即可解决。手动修正类的注解(备选方案)
如果前两种方法都不生效,可以手动修改类的__annotations__来强制指定类型,不过这种方式比较hack,仅作为兜底手段:from typing import Any from attrs import define, field def asstr(a: Any) -> str: return str(a) @define class Test: """Test class""" x: str = field(converter=asstr) def test(self): """测试方法""" self.x # 手动修正属性的类型注解 Test.__annotations__["x"] = str
内容的提问来源于stack exchange,提问作者Chitaoji
相关产品推荐
相关产品推荐

