从 str 和 Enum 继承的注意事项是什么

What are the caveats of inheriting from both str and Enum

使用从 strEnum 继承的 class 有什么注意事项(如果有的话)?

这被列为解决问题的可能方法 Serialising an Enum member to JSON

from enum import Enum

class LogLevel(str, Enum):
    DEBUG = 'DEBUG'
    INFO = 'INFO'

当然重点是将这个 class 用作枚举,它具有所有优点

当枚举常量始终为字符串时,此方法可行。如果您希望右手始终是常量的字符串值,则此方法有效。

这是一个例子,如果我想将 rightHandside 编码为整数,这将不起作用

   class Status(str, Enum):
       DEFAULT=1

   type(json.dumps(Status.DEFAULT)  

将输出为

str 或任何其他类型继承时,生成的枚举成员也是该类型。这意味着:

  • 他们拥有该类型的所有方法
  • 它们可以用作那种类型
  • 而且,最重要的是,它们将与该类型的其他实例进行比较

最后一点是最重要的:因为 LogLevel.DEBUG 是一个 str 它将与其他字符串进行比较——这很好——但也会与其他 str 进行比较-based Enums -- 这可能很糟糕。

Info regarding subclassing enum from the documentation