为枚举成员实现__call__方法是否合理?及PyCharm类型提示问题求助
枚举成员实现__call__方法是否合理?及PyCharm类型提示问题求助
我的两个核心疑问
我在网上搜了好半天都没找到答案,现在有两个问题想请教大家:
- 让枚举成员(划重点:是成员本身,不是枚举类,枚举类支持调用的资料已经很多了)实现可调用是不是一个合理的实践思路?
- 如果这种做法是可行的,怎么让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
相关产品推荐
相关产品推荐

