具有无限成员的Python枚举

具有无限成员的Python枚举,python,enums,Python,Enums,我正在寻找一种在python中创建枚举的简单方法,其中包含许多成员,并且可能有无限多的成员 例如,在枚举可数集时,或者当您不想创建包含10000个成员的枚举,而是按需(动态)创建它们时,这可能会被证明很有用 我的用例是为WRS-2平铺网格创建枚举,但它也可以用于化学公式 我在考虑首先定义四种方法: 名称=f1(值) 值=f2(名称) 如果值正确,则返回f3(值) 如果名称正确,则返回f4(名称) 然后我想使用python的一些神奇方法在正确的位置插入这些方法 例如,我试图在一个新的元类中

我正在寻找一种在python中创建枚举的简单方法,其中包含许多成员,并且可能有无限多的成员

例如,在枚举可数集时,或者当您不想创建包含10000个成员的枚举,而是按需(动态)创建它们时,这可能会被证明很有用

我的用例是为WRS-2平铺网格创建枚举,但它也可以用于化学公式


我在考虑首先定义四种方法:

  • 名称=f1(值)
  • 值=f2(名称)
  • 如果值正确,则返回f3(值)
  • 如果名称正确,则返回f4(名称)
然后我想使用python的一些神奇方法在正确的位置插入这些方法


例如,我试图在一个新的元类中捕获
\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
等更好的名字吗。?