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

解决mypy与Pylance对返回Callable的函数的报错问题

问题原因及解决办法

原因

  • 你搞错了@property装饰器的用法:被@property装饰的方法是当作属性来访问的,不需要加括号调用。你的aggregator被@property和@abstractmethod装饰后,self.aggregator直接返回Callable[[Column], Column]类型的函数。而你写的self.aggregator()相当于把这个返回的函数又调用了一次——但这个函数必须接收一个Column类型的参数,你没传,所以mypy和Pylance会提示参数不足。
  • 测试能运行是因为Python的动态特性掩盖了这个问题,但静态类型检查器会严格按类型注解校验,所以报错。

解决办法

把aggregator后面的括号去掉,正确的调用代码是:

return self.aggregator(self.columnExpression()).alias(self.feature_name)

对应代码示例

你的抽象基类定义大概是这样的,修正后就能通过类型检查:

from abc import ABC, abstractmethod
from typing import Callable
# 假设Column是你使用的列类型,比如pyspark.sql.Column
from pyspark.sql import Column

class Feature(ABC):
    @property
    @abstractmethod
    def aggregator(self) -> Callable[[Column], Column]:
        pass
    
    @property
    def column(self):
        # 修正前错误写法:self.aggregator()(self.columnExpression())
        return self.aggregator(self.columnExpression()).alias(self.feature_name)
    
    @abstractmethod
    def columnExpression(self) -> Column:
        pass
    
    @property
    @abstractmethod
    def feature_name(self) -> str:
        pass

这样修改后,静态类型检查器会识别出self.aggregator就是需要的可调用函数,传入columnExpression()的结果刚好符合参数要求,不会再报错。

内容的提问来源于stack exchange,提问作者jamiet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:50:30