кортеж и перечисление Python - PullRequest
0 голосов
/ 20 февраля 2019

Поэтому я пытался использовать enums в python и столкнулся со следующей ошибкой: когда я использовал enum в качестве кортежа и присвоил ему два значения, я не могу получить доступ только к одному значению, например 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)

и печать

(13, «король»)

Как получить доступ только к одному значению, чтобы я мог напечатать 13 или «король»

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Вы можете просто использовать индексы, как если бы вы использовали их в массиве:

>>> KING = 13, 'King'
>>> KING
(13, 'King')
>>> KING[0]
13
>>> KING[1]
'King'
>>> 
0 голосов
/ 20 февраля 2019

У вас есть следующие возможности для доступа к 13 или «королю»:

Rank.KING.value[0]
Rank.KING.value[1]
0 голосов
/ 20 февраля 2019

При enum.Enum имена переменных класса сами становятся атрибутом name перечисляемых атрибутов экземпляра Enum, поэтому вам не нужно указывать KING кортеж значения и имени:

class Rank(Enum):
    King = 13

print(Rank.King.name) # outputs 'King'
print(Rank.King.value) # outputs 13

Если вы хотите назвать переменные класса заглавными буквами, но иметь их значения 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
...