首页 > 解决方案 > 在这种情况下使用枚举是否合理?

问题描述

所以我过去常常将配置维护为 dicts,然后偶然发现了 python 中的枚举。以下是我以前做的:

CONFIG = {
  "field1": {"field11": "value11", ....},
  "field2": {"field12": "value22", .....},
}

这将是一个全局的,并且将包含我的应用程序将使用的一些配置。然后我使用枚举进行了相同的转换,如下所示:

from enum import Enum, unique

@unique
class Config(Enum):
    field1 = {"field11": "value11", .....}
    field2 = {"field22": "value22", .....}

一开始使用枚举的好处很模糊,但是当我深入挖掘时,我发现枚举是不可变的,可以强制唯一性,并且它提供了一种更清洁的方式来遍历其成员。

我检查了这是否在任何 python 第三方或标准库中使用。我发现他们中的大多数都使用如下类:

class Config:
    field1 = {"field11": "value11", .....}
    field2 = {"field22": "value22", .....}

所以我的问题是,枚举是保存不应该被意外更改的配置的好选择,或者它只是矫枉过正,并且可以使用类来代替吗?

想知道哪一个被认为是最佳做法。

标签: python-3.xenums

解决方案


在你的问题中使用 enum 的主要优点是它允许在代码中编写符号常量,而使用字典你必须检查字典中的键,例如:

Config.field1

相对

Config["field1"]

因此,差异将是语法上的优势,但与字典不同,枚举本质上是不可变的,并且与类不同,枚举不能扩展。


推荐阅读