Python3 - 将枚举转换为不同的数据类型

use*_*052 3 python enums enumeration type-conversion python-3.x

我目前正在使用以下类型的枚举:

class System(Enum):
  FIRST = 1
  SECOND = 2
Run Code Online (Sandbox Code Playgroud)

现在我希望能够执行以下操作:

a = System.FIRST
url = a.getSystemURL()
Run Code Online (Sandbox Code Playgroud)

FIRST其中枚举成员和的 urlSECOND当然是不同的。

我可以创建一个字典,其中枚举成员作为键,网址作为值,但这不能保证如果我稍后添加枚举成员,我会记得添加相应的字典条目。

是否有一种干净的方法来为枚举成员提供具有多个值的枚举?并命名这些不同的值?

像这样的东西:

class System(Enum):
  Values = (Value, url, something)
  FIRST = 1, 'https://www.example.com', 42
  SECOND = 2, 'https://www.test.com', 13
Run Code Online (Sandbox Code Playgroud)

Ara*_*Fey 5

文档中有一个这样的例子。如果类定义了一个__init__方法,枚举值将作为参数传递给它。这意味着您可以像这样定义枚举:

class System(Enum):
    FIRST = 1, 'https://www.example.com', 42
    SECOND = 2, 'https://www.test.com', 13

    def __init__(self, value, url, something):
        self.value_ = value
        self.url = url
        self.something = something
Run Code Online (Sandbox Code Playgroud)

(请注意,这value是枚举保留的特殊属性,因此我命名该属性value_以避免名称冲突。)

您现在可以访问每个枚举成员的这些属性:

>>> System.FIRST.url
'https://www.example.com'
Run Code Online (Sandbox Code Playgroud)