我需要在Python中模拟枚举,我是通过编写类来实现的,例如:
class Spam(Enum):
k = 3
EGGS = 0
HAM = 1
BAKEDBEANS = 2
现在我想测试某个常量是否是特定枚举类的有效选择,使用以下语法:
if (x in Foo):
print("seems legit")
因此,我尝试创建一个“枚举”基类,在其中覆盖了__contains__
方法,如下所示:
class Enum:
"""
Simulates an enum.
"""
k = 0 # overwrite in subclass with number of constants
@classmethod
def __contains__(cls, x):
"""
Test for valid enum constant x:
x in Enum
"""
return (x in range(cls.k))
然而,当在类上使用 in
关键字(就像上面的示例一样)时,我会收到错误消息:TypeError: argument of type 'type' is not iterable
为什么会这样?我能以某种方式获得我想要的语法糖吗?
if x in Foo(): print('seems legit')
会使得问题和答案更容易理解。因为 type(Foo()) 是 Foo 类型,而 type(Foo) 是元类。 - phil_20686