【问题标题】:What are the caveats of inheriting from both str and Enum从 str 和 Enum 继承的注意事项是什么
【发布时间】:2020-06-28 19:30:33
【问题描述】:

使用继承自 strEnum 的类有哪些注意事项(如果有)?

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

from enum import Enum

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

当然重点是使用这个类作为一个枚举,具有它的所有优点

【问题讨论】:

    标签: python python-3.x enums multiple-inheritance


    【解决方案1】:

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

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

    最后一点是最重要的:因为LogLevel.DEBUGstr,它将与其他字符串进行比较——这很好——但也会与其他基于strEnums 进行比较——这可能很糟糕。

    Info regarding subclassing enum from the documentation

    【讨论】:

    • 如果比较像字符串那样进行,我想也会有减速?
    • @Alonme:担心的还不够。
    【解决方案2】:

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

    这是一个例子,如果我想将右手边编码为整数,这是行不通的

       class Status(str, Enum):
           DEFAULT=1
    
       type(json.dumps(Status.DEFAULT)  
    
    

    将输出为

    【讨论】:

    • 会输出为?还请提供开箱即用的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2020-11-04
    相关资源
    最近更新 更多