代码之家  ›  专栏  ›  技术社区  ›  alvas

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

  •  0
  • alvas  · 技术社区  · 5 年前

    我有一个调音台 str + Enum 类,该类允许代码的其他部分访问变量状态的字符串表示形式。

    有一个特定的枚举 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
    

    我的问题是:

    • 目前,我将不得不使用 Fruits.is_citrus 检查方法 o 枚举对象,该 Fruit o.is_citrus() ?
    1 回复  |  直到 5 年前
        1
  •  5
  •   Samwise    5 年前

    使其成为普通实例方法:

    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}
    
        2
  •  1
  •   Corralien    5 年前

    你觉得用电脑怎么样 @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
    
    推荐文章