代码之家  ›  专栏  ›  技术社区  ›  Utkonos

如何将Python枚举公开为不带类名的“常量”

  •  0
  • Utkonos  · 技术社区  · 2 年前

    下面的代码创建了三个“常量”,可以在每个常量之前不使用枚举的类名。有没有一种方法可以对枚举的所有成员执行此操作,而不必为每个成员显式地执行代码行,如图所示?

    import enum
    
    class Test(enum.Enum):
        ONE = 1
        TWO = 2
        THREE = 3
    
    ONE = Test.ONE
    TWO = Test.TWO
    THREE = Test.THREE
    

    基本上,对于一个同时拥有20-30个成员的枚举,有没有一种有效的方法可以做到这一点?

    1 回复  |  直到 2 年前
        1
  •  3
  •   Victor Egiazarian    2 年前

    我不建议这样做,因为枚举的名称显示了归属。例如,直观的是 一月 工作月份 来自以下代码:

    class WorkingMonth(enum.Enum):
        JANUARY = "january"
        FEBRUARY = "february"
        ...
    
    # WorkingMonth.JANUARY
    

    在这种情况下,省略符号是没有意义的。此外,如果枚举的名称不同但值相交,这会增加潜在错误的可能性:

    class ServerFormats(enum.Enum):
        MP3 = "mp3"
        WAV = "wav"
    
    
    class ClientFormats(enum.Enum):
        MP3 = "mp3"
        FLAC = "flac"
    
    # ServerFormats.MP3 and ClientFormats.MP3 will conflict
    

    总之,我想说这是相当糟糕的做法。