You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何纠正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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:23:22