python元组和枚举

Fla*_*rav 8 python enums tuples

所以我试图在 python 中使用枚举并遇到以下错误:当我使用枚举作为元组并给它两个值时,我不能只访问一个值,例如 tuple[0]

class Rank(Enum):
    ACE = 1
    TWO = 2
    THREE = 3
    FOUR = 4
    FIVE = 5
    SIX = 6
    SEVEN = 7
    EIGHT = 8
    NINE = 9
    TEN = 10
    JACK = 11
    QUEEN = 12
    KING = 13, "King"

print (Rank.KING.value)
Run Code Online (Sandbox Code Playgroud)

印刷品是

(13, '国王')

如何仅访问一个值以便打印 13 或“King”?

blh*_*ing 10

使用enum.Enum,类变量名称本身成为实例name的枚举属性的属性Enum,因此您不必创建KING值和名称的元组:

class Rank(Enum):
    King = 13

print(Rank.King.name) # outputs 'King'
print(Rank.King.value) # outputs 13
Run Code Online (Sandbox Code Playgroud)

如果你想用大写字母命名类变量,但它们的name值是混合大小写的,这不是Enum设计的目的,你必须自己子类化Enum并覆盖该name方法以自定义行为:

from enum import Enum, DynamicClassAttribute

class MixedCaseEnum(Enum):
    @DynamicClassAttribute
    def name(self):
        return self._name_.title()

class Rank(MixedCaseEnum):
    KING = 13

print(Rank.KING.name) # outputs 'King'
print(Rank.KING.value) # outputs 13
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您愿意,现有的答案都没有解释如何在枚举中拥有三个(或更多)值。

例如,假设最初的提问者想要(13, "K", "king")枚举,他们会这样做:


class Rank(Enum):
    K = 13, "King"

    def __init__(self, rank, label):
        self.rank = rank
        self.label = label
Run Code Online (Sandbox Code Playgroud)

获取__init__值并将它们分配给枚举成员。这意味着Rank.K.rank返回13Rank.K.label返回"King"

尽管在此示例中并非严格需要,但在 Enum 上存储多个键/值对可能会很有用。

注意Rank.K.value仍然存在,并返回元组(13, "King")


NGB*_*NGB 6

您可以通过以下方式访问 13 或“国王”:

Rank.KING.value[0]
Rank.KING.value[1]
Run Code Online (Sandbox Code Playgroud)