混合枚举并检查枚举对象是否是 class 的子集之一

Mixin Enums and checking if an Enum object is one of a subset of the class

我有一个 mixin str + Enum class 允许我的代码的其他部分访问我的变量状态的字符串表示。

有一个特定的枚举 citrus 类型可以来自所有可能枚举的子集。目前我正在使用 classmethod 来检查“柑橘味”:

from enum import Enum

class Fruits(str, Enum):
    apple = "apple"
    banana = "banana"
    orange = "orange"
    lemon = "lemon"

    citrus = {orange, lemon}

    @classmethod
    def is_citrus(cls, state):
        return state in cls.citrus

[用法]:

>>> o = Fruits.orange
>>> Fruits.is_citrus(o)
True

我的问题是:

使其成为普通实例方法:

class Fruits(str, Enum):
    apple = "apple"
    banana = "banana"
    orange = "orange"
    lemon = "lemon"

    citrus = {orange, lemon}

    def is_citrus(self):
        return self in self.citrus

我不确定 citrus = {orange, lemon} 是否完全符合您的想法(它最终是一个集合的字符串表示而不是实际集合)——而不是 citrus是它自己的枚举值我将仅在 is_citrus 内实现“柑橘味”的概念,如下所示:

    def is_citrus(self):
        return self in {Fruits.orange, Fruits.lemon}

您觉得使用 @property 怎么样?

class Fruits(str, Enum):
    apple = "apple"
    banana = "banana"
    orange = "orange"
    lemon = "lemon"

    @property
    def is_citrus(self):
        return self in ['orange', 'lemon']
>>> o = Fruits.orange
>>> o.is_citrus
True

>>> a = Fruits.apple
>>> a.is_citrus
False