我在 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(...)
中字符串参数的用途是什么?
但是,这不仅定义了一个名为 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'>
>>>