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

为枚举成员实现__call__方法是否合理?及PyCharm类型提示问题求助

枚举成员实现__call__方法是否合理?及PyCharm类型提示问题求助

我的两个核心疑问

我在网上搜了好半天都没找到答案,现在有两个问题想请教大家:

  1. 让枚举成员(划重点:是成员本身,不是枚举类,枚举类支持调用的资料已经很多了)实现可调用是不是一个合理的实践思路?
  2. 如果这种做法是可行的,怎么让PyCharm 2025.3.3识别到这些枚举成员是可调用的?

为什么会有这些疑问?

在我的项目里,我一直在重复写相似的代码——把某个枚举成员转换成一个包含它的自定义类实例,还要加上其他参数。为了减少这种重复劳动,我就想着能不能让枚举成员自己支持调用,自动帮我完成这个转换工作。

下面是我写的最小可复现代码,能直观展示我的需求:

from enum import Enum
from dataclasses import dataclass


@dataclass(frozen=True)
class TTypeDef:
    ttype: TokenType
    content: str


class TokenType(Enum):
    FOO = "FOO"
    BAR = "BAR"

    def __call__(self, content):
        return TTypeDef(self, content)


assert TokenType.FOO("foo") == TTypeDef(TokenType.FOO, "foo")

(实际项目里,直接实例化TTypeDef的场景会更有意义,这里只是简化示例)

但现在遇到一个问题:PyCharm 2025.3.3会在TokenType.FOO("foo")这一行报警告,提示“字符串不可调用”。显然它没搞明白,这里的TokenType.FOO实际是枚举实例,而不是定义里的字符串值。

我特意去网上搜了怎么解决这个警告,但发现好像没人遇到过和我一样的问题……这就让我开始怀疑,是不是我这种做法本身就不太合理?

备注:内容来源于stack exchange,提问作者user23307932

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:23:08