Создать список поиска значений для перечисления - PullRequest
2 голосов
/ 20 июня 2019

Я хотел бы добавить список поиска в Enum в качестве статической переменной.Лучшее, что я могу сделать, это

class Seed(IntEnum):
    HEARTS = 0
    DIAMONDS = 1
    SPADES = 2
    CLUBS = 3
    @staticmethod
    def value_list():
        Seed.list = [s.value for s in Seed]

, а затем в коде я должен сделать

Seed.value_list()

, чтобы инициализировать переменную list, которая в этом случае не является статической, но являетсяТо же самое для всех случаев.Тогда я могу использовать

Seed.list

Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Вы можете написать класс декоратор :

def values_list(enum_cls):
    # create the values_list attribute and then return the class
    enum_cls.values_list = [member.value for member in enum_cls]
    return enum_cls

@values_list
class Seed(IntEnum):
    HEARTS = 0
    DIAMONDS = 1
    SPADES = 2
    CLUBS = 3

print(Seed.values_list)
# [0, 1, 2, 3]
1 голос
/ 20 июня 2019

Вам необходимо вернуть список значений:

from enum import IntEnum


class Seed(IntEnum):
    HEARTS = 0
    DIAMONDS = 1
    SPADES = 2
    CLUBS = 3

    @classmethod
    def values(cls):
        return [s.value for s in cls]

if __name__ == '__main__':

    print(Seed.values())

выход:

[0, 1, 2, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...