【发布时间】:2012-05-13 19:41:25
【问题描述】:
我需要在 Python 中模拟枚举,并通过编写如下类来实现:
class Spam(Enum):
k = 3
EGGS = 0
HAM = 1
BAKEDBEANS = 2
现在我想测试某个常量是否是特定 Enum 派生类的有效选择,语法如下:
if (x in Foo):
print("seems legit")
因此,我尝试创建一个“Enum”基类,并在其中覆盖 __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) 是元类。
标签: python python-3.x metaclass