混合枚举并检查枚举对象是否是 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.is_citrus
方法来检查 o
枚举对象,如何更改 Fruit
class 以便我可以做像 o.is_citrus()
?
使其成为普通实例方法:
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
我有一个 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.is_citrus
方法来检查o
枚举对象,如何更改Fruit
class 以便我可以做像o.is_citrus()
?
使其成为普通实例方法:
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