Python枚举不受限成员

2024-04-29 00:18:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,这对于枚举可数集很有用,或者当您不想创建包含10000个成员的枚举,而是按需(动态)创建它们时。你知道吗

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


我想先定义四种方法:

  • 名称=f1(值)
  • 值=f2(名称)
  • 如果值正确,则返回f3(value)
  • 如果名称正确,则返回f4(name)

然后我想使用python的一些神奇方法在正确的位置插入这些方法。你知道吗


例如,我尝试在一个新的元类中捕获__getattr__调用,并使用aenum包扩展枚举,但无法使其工作。你知道吗

谢谢


Tags: 方法名称网格定义动态成员用例公式
2条回答

我认为您需要的是set内置类。遵循tutorial within the official documentation是一个很好的起点:

可以通过文字语法或函数调用创建集合:

>>> 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')

我不太清楚你对enum的理解是什么,你希望它有什么属性,但看起来你真的在定义一个函数,在这个函数中,你将它与一个数(任意数)相关联,只要它是相同的。我认为使用生成器和这样的列表可以相对容易地完成这项工作:

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(可能语法略有不同)或一个(哈希?)功能。你知道吗

相关问题 更多 >