【发布时间】:2023-03-15 13:42:01
【问题描述】:
我从这段代码 sn-p 开始,据我了解,它本质上是一个类工厂,用于模拟其他语言的“枚举”类型:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
return type('Enum', (), enums)
(我取自这里:How can I represent an 'Enum' in Python?)
我知道它是如何工作的,而且确实如此,但我想让我的动态生成的类(它们的类型为“枚举”)可迭代,以便我可以执行以下操作以进行完整性检查:
MyEnum = enum('FOO', 'BAR', 'JIMMY')
def func(my_enum_value): # expects one of the MyEnum values
if not my_enum_value in MyEnum:
raise SomeSortOfException
但是,为了使健全性检查工作,我需要使 MyEnum 可迭代。我在这里读到:http://pydanny.blogspot.com/2007/10/required-methods-to-make-class-iterable.html 我需要按顺序添加 iter len contains 和 getitem 方法使其可迭代。我开始走这条路(重写枚举代码)但卡住了:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
enums['_enums'] = enums.copy() # (so I'd have them in the Class in order to use for the methods I'll be implementing to make it iterable)
Enum = type('Enum', (), enums)
Enum.__iter__ = #Er, how do I do this? Guess I'll ask SO
Enum.__len__ = # etc.
# . . .
return Enum
那么,如何使生成的 Enum 类可迭代,以便我可以对它们使用 'in' 词?这对我来说不是生死攸关的事,但我通过这样做学习了大量的 Python。
【问题讨论】:
-
这不是那个的副本。尝试简单地将
__contains__方法添加到创建的类;它不会工作。
标签: python