在 python 中创建 `Enum` 类和实例的指南

问题描述 投票:0回答:1

我在 Python 中声明一个类,其中一个实例属性的值将限制为 Enum 成员。我通过

pydantic
包实现了这一点。由于枚举成员是由用户在配置文件内的列表
enum_members
中提供的,因此我需要一种动态方法来创建
Enum
并且无法对其成员进行硬编码。我知道正确的做法是:

from enum import Enum
MyEnum = Enum('MyEnum', enum_members)

但是,这不仅定义了一个名为

MyEnum
的 Enum 类,还创建了该类的一个实例,也称为
MyEnum
。有没有办法单独创建类? 如果我写:

Enum('MyEnum', enum_members)

我没有收到错误,但我不再可以使用

MyEnum
。 令人惊讶的是,我还可以写:

MyEnumNew = Enum('MyEnum', enum_members)

我可以使用

MyEnumNew

Enum(...)
中字符串参数的用途是什么?

python enums pydantic
1个回答
0
投票

但是,这不仅定义了一个名为 MyEnum 的 Enum 类,它还创建了该类的一个实例,也称为 MyEnum。

这是不真实的。它只是创建了类。

我没有收到错误,但我不再可以使用 MyEnum。

因为你只是调用了一个函数,并没有分配结果。

Enum(...) 中字符串参数的用途是什么?

命名枚举,因为它没有其他方式具有描述性名称:

>>> E = Enum("Foople", [])
>>> E.__name__
'Foople'

令人惊讶的是,我还可以写:...

是的,您也可以通过课程来做到这一点。

>>> class X:
...   pass
...
>>> Y = X
>>> Y
<class '__main__.X'>
>>>

郑重声明,

class ...
的“函数形式”为
type()

>>> Z = type('Foople', (), {})
>>> Z
<class '__main__.Foople'>
>>>
© www.soinside.com 2019 - 2024. All rights reserved.