我使用Enum4库创建一个枚举类如下:

class Color(Enum):
    RED = 1
    BLUE = 2

我想把[1,2]作为一个列表打印出来。我怎样才能做到这一点呢?


当前回答

你可以使用IntEnum:

from enum import IntEnum

class Color(IntEnum):
   RED = 1
   BLUE = 2


print(int(Color.RED))   # prints 1

获取整型数组的列表:

enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]

其他回答

你可以有一个这样的SuperEnum:

from enum import Enum

class SuperEnum(Enum):    
    @classmethod
    def to_dict(cls):
        """Returns a dictionary representation of the enum."""
        return {e.name: e.value for e in cls}
    
    @classmethod
    def keys(cls):
        """Returns a list of all the enum keys."""
        return cls._member_names_
    
    @classmethod
    def values(cls):
        """Returns a list of all the enum values."""
        return list(cls._value2member_map_.keys())

像这样使用它:

class Roles(SuperEnum):
    ADMIN = 1
    USER = 2
    GUEST = 3

所以你可以:

Roles.to_dict() # {'ADMIN': 1, 'USER': 2, 'GUEST': 3}
Roles.keys() # ['ADMIN', 'USER', 'GUEST']
Roles.values() # [1, 2, 3]

使用__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"

你可以使用IntEnum:

from enum import IntEnum

class Color(IntEnum):
   RED = 1
   BLUE = 2


print(int(Color.RED))   # prints 1

获取整型数组的列表:

enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]

您可以执行以下操作:

[e.value 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....这样的新键但这只是一个实现细节,不应该玩弄。黑魔法需要大量的维护费用。