如何向 `enum.StrEnum` 添加属性?

sor*_*bet 3 python enums python-3.x

我有一个enum.StrEnum, 我想为其元素添加属性。

例如:

class Fruit(enum.StrEnum):
    APPLE = ("Apple", { "color": "red" })
    BANANA = ("Banana", { "color": "yellow" })

>>> str(Fruit.APPLE)
"Apple"

>>> Fruit.APPLE.color
"red"
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?(我正在运行 Python 3.11.0。)

这个问题与这个问题不是重复的,后者询问的是原始问题enum.Enum

Eth*_*man 5

答案与另一个问题大致相同(但太长,无法在此处发表评论):

from enum import StrEnum

class Fruit(StrEnum):
    #
    def __new__(cls, value, color):
        member = str.__new__(cls, value)
        member._value_ = value
        member.color = color
        return member
    #
    APPLE = "Apple", "red"
    BANANA = "Banana", "yellow" 
Run Code Online (Sandbox Code Playgroud)

如果您确实想使用 adict来表示属性,则可以,但您可能会面临忘记属性的风险,然后一个或多个成员将丢失它。