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

继承str与enum.Enum的类,两种打印方式为何输出结果不同?

继承str与enum.Enum的类,两种打印方式为何输出结果不同?

你给出的代码如下:

import enum

class Status(str, enum.Enum):
    """Status options."""
    NEW = "NEW"
    EXCLUDED = "EXCLUDED"
    
print("" + Status.NEW)
print(Status.NEW)

这事儿得从Python枚举类的特性和隐式类型转换两方面来说,我给你拆解开:

  • 第一个场景:print("" + Status.NEW)输出"NEW"
    当你把枚举成员和空字符串做拼接时,Python的字符串+操作要求两边都是字符串类型,所以会自动触发隐式类型转换——把Status.NEW转换成字符串。
    因为你的Status类继承了str,每个枚举成员(比如Status.NEW)同时是str的子类实例,转换后会直接返回它对应的字符串值"NEW",最终拼接结果就是"NEW",打印出来自然就是这个内容。

  • 第二个场景:print(Status.NEW)输出"Status.NEW"
    这里大概率是你混淆了两种输出场景:如果是在Python交互式环境里直接输入Status.NEW,会显示它的repr结果(类似<Status.NEW: 'NEW'>),你可能简化描述成了"Status.NEW";但如果是用print函数输出,正常情况下应该也是"NEW"才对。

    不过如果确实出现了print(Status.NEW)输出"Status.NEW"的情况,可能是你用的Python版本太旧(比如Python 3.6及以前),这种混合继承的行为在旧版本里和现在不同;或者是你不小心写错了继承顺序(不过把enum.Enum放在str前面会报错,因为Enum要求作为第一个基类)。

核心逻辑总结:

  • 字符串拼接时,枚举成员会因为继承了str而被转换成对应的字符串值;
  • 直接打印枚举成员时,若继承了str,默认会输出字符串值;若没继承str,才会输出类似Status.NEW的枚举标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:44:30