我使用Enum4库创建一个枚举类如下:
class Color(Enum):
RED = 1
BLUE = 2
我想把[1,2]作为一个列表打印出来。我怎样才能做到这一点呢?
我使用Enum4库创建一个枚举类如下:
class Color(Enum):
RED = 1
BLUE = 2
我想把[1,2]作为一个列表打印出来。我怎样才能做到这一点呢?
当前回答
Enum有一个__members__字典。 @ozgur提出的解决方案确实是最好的,但你可以这样做,它做的是同样的事情,但需要更多的工作
(颜色。color . __member__ .items()中color_name的值
__members__字典可以派上用场,如果你想在其中动态地插入东西…在一些疯狂的情况下。
(编辑) 显然__members__不是一个字典,而是一个映射代理。这意味着你不能轻易地向它添加项目。
你也可以做一些奇怪的事情,比如MyEnum。__dict__['_member_map_']['new_key'] = 'new_value',然后你可以使用像myenumer .new_key....这样的新键但这只是一个实现细节,不应该玩弄。黑魔法需要大量的维护费用。
其他回答
enum类。Enum是一个解决所有枚举需求的类,因此您只需要继承它,并添加自己的字段。然后从那时起,你所需要做的就是调用它的属性:name & value:
from enum import Enum
class Letter(Enum):
A = 1
B = 2
C = 3
print({i.name: i.value for i in Letter})
# prints {'A': 1, 'B': 2, 'C': 3}
只使用:
[e.value for e in Color]
生产:
[1, 2]
要获得名称,请使用:
[e.name for e in Color]
生产:
(“红”、“蓝”)
Enum有一个__members__字典。 @ozgur提出的解决方案确实是最好的,但你可以这样做,它做的是同样的事情,但需要更多的工作
(颜色。color . __member__ .items()中color_name的值
__members__字典可以派上用场,如果你想在其中动态地插入东西…在一些疯狂的情况下。
(编辑) 显然__members__不是一个字典,而是一个映射代理。这意味着你不能轻易地向它添加项目。
你也可以做一些奇怪的事情,比如MyEnum。__dict__['_member_map_']['new_key'] = 'new_value',然后你可以使用像myenumer .new_key....这样的新键但这只是一个实现细节,不应该玩弄。黑魔法需要大量的维护费用。
一种方法是获取_value2member_map_属性的键值:
class Color(Enum):
RED = 1
BLUE = 2
list(Color._value2member_map_.keys())
# [1, 2]
使用__members__类方法:
class RoleNames(str, Enum):
AGENT = "agent"
USER = "user"
PRIMARY_USER = "primary_user"
SUPER_USER = "super_user"
@classmethod
def list_roles(cls):
role_names = [member.value for role, member in cls.__members__.items()]
return role_names
>>> role_names = RoleNames.list_roles()
>>> print(role_names)
或者如果你有多个Enum类并且想要抽象类方法:
class BaseEnum(Enum):
@classmethod
def list_roles(cls):
role_names = [member.value for role, member in cls.__members__.items()]
return role_names
class RoleNames(str, BaseEnum):
AGENT = "agent"
USER = "user"
PRIMARY_USER = "primary_user"
SUPER_USER = "super_user"
class PermissionNames(str, BaseEnum):
READ = "updated_at"
WRITE = "sort_by"
READ_WRITE = "sort_order"