具有无限成员的Python枚举
我正在寻找一种在python中创建枚举的简单方法,其中包含许多成员,并且可能有无限多的成员 例如,在枚举可数集时,或者当您不想创建包含10000个成员的枚举,而是按需(动态)创建它们时,这可能会被证明很有用 我的用例是为WRS-2平铺网格创建枚举,但它也可以用于化学公式具有无限成员的Python枚举,python,enums,Python,Enums,我正在寻找一种在python中创建枚举的简单方法,其中包含许多成员,并且可能有无限多的成员 例如,在枚举可数集时,或者当您不想创建包含10000个成员的枚举,而是按需(动态)创建它们时,这可能会被证明很有用 我的用例是为WRS-2平铺网格创建枚举,但它也可以用于化学公式 我在考虑首先定义四种方法: 名称=f1(值) 值=f2(名称) 如果值正确,则返回f3(值) 如果名称正确,则返回f4(名称) 然后我想使用python的一些神奇方法在正确的位置插入这些方法 例如,我试图在一个新的元类中
我在考虑首先定义四种方法:
- 名称=f1(值)
- 值=f2(名称)
- 如果值正确,则返回f3(值)
- 如果名称正确,则返回f4(名称)
例如,我试图在一个新的元类中捕获
\uuu getattr\uuuu
调用,并使用aenum包扩展枚举,但无法使其工作
谢谢你我不太确定你对
枚举
的理解是什么,你希望它有什么属性,但看起来你真的在定义一个函数,其中某个项
与一个数字(任何数字)相关联,只要它是相同的。我认为使用生成器和如下列表可以相对轻松地完成此操作:
def ienum(item, items=[]):
if item in items:
return items.index(item)
else:
items.append(item)
return items.index(item)
ienum('foo')
# 0
ienum('bar')
# 1
ienum('foo')
# 0
# etc.
如果您想控制与名称关联的值,那么实际上您需要的是一个
dict
(可能语法稍有不同)或(hash?)函数。我认为您需要的是集
内置类。以下是一个很好的起点:
可以通过文字语法或函数调用创建集合:
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> basket = set(['apple', 'orange', 'apple', 'pear', 'orange', 'banana'])
它们不包含重复项:
>>> print(basket)
{'orange', 'banana', 'pear', 'apple'}
它们支持非常快速的成员资格测试,这就是为什么我认为它们适合解决您手头的问题:
>>> 'orange' in basket
True
集合可以按其需要的大小增长:
>>> basket.add('grape')
只是您希望您的枚举具有什么属性?
class MyEnum:\ndef\uuuuu init\uuuuu(self,name):self.name=name
足够了吗?拥有.name
,.value
,使用括号(从值)和括号(从名称)访问,比较。我不知道你想要什么——你能用几个成员定义一个实际的Enum
,并举例说明你想如何使用它吗?还有比f1
、f2
等更好的名字吗。?