【问题标题】:How to change the base value of auto in python Enum?如何在 python Enum 中更改 auto 的基值?
【发布时间】:2019-05-01 21:55:11
【问题描述】:

假设我有以下代码,如何更改 auto 的基值,以便 Animal.ant 是任意值,例如10 个,而不是 1 个?

from enum import Enum, auto

class Animal(Enum):
    ant = auto()
    bee = auto()
    cat = auto()
    dog = auto()

【问题讨论】:

  • 你读过docs.python.org/3/library/enum.html#using-automatic-values吗?你到底想在这里实现什么?这似乎是一个 XY 问题。
  • 您的问题的答案可以在以下链接中找到stackoverflow.com/questions/24243500/…
  • @YatShan 不,那不一样
  • auto 的全部意义在于产生任意但一致的值。精确方法保留为实现细节。将自动值设置为特定值,例如 10,是 less 任意的。你的目标是什么?在多大程度上你需要更多的任意值?

标签: python python-3.x enums


【解决方案1】:

如果您希望某些成员具有某些值,只需分配它们:

class Animal(Enum):
    ant = 10
    bee = auto()
    cat = auto()
    dog = auto()

这将自动调整后续成员的值:

>>> list(Animal)
[<Animal.ant: 10>, <Animal.bee: 11>, <Animal.cat: 12>, <Animal.dog: 13>]

【讨论】:

    【解决方案2】:

    您可以使用_generate_next_value_ 更改auto() 选择值的方式。例如:

    from enum import Enum, auto
    
    class Auto_10(Enum):
        def _generate_next_value_(name, start, count, last_values):
            if name == "ant":
                return 10
            else:
               return last_values[-1] + 1
    
    class Animal(Auto_10):
        ant = auto()
        bee = auto()
        cat = auto()
        dog = auto()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多