从 str 和 Enum 继承的注意事项是什么
What are the caveats of inheriting from both str and Enum
使用从 str
和 Enum
继承的 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 Enum
s -- 这可能很糟糕。
使用从 str
和 Enum
继承的 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 Enum
s -- 这可能很糟糕。