gpt4 book ai didi

python - 为什么 IntEnum 不关心我是否使用元组?

转载 作者:太空狗 更新时间:2023-10-30 03:01:15 25 4
gpt4 key购买 nike

注意到有人写了这样一个枚举:

from enum import IntEnum

class Animal(IntEnum):
dog = 1,
cat = 2

而且我认为这是一个会导致运行时错误的错误,因为 dog 的值实际上是一个元组。令我惊讶的是它有效,Animal.dog.value == 1

这个有效:

class Potato(IntEnum):
spud = ()

空元组以某种方式被转换为整数 0(可能是调用 int 的参数?)。

虽然这不起作用:

class Potato(IntEnum):
spud = []

我们得到 TypeError: int() argument must be a string or a number, not 'list'

我在 python3 和 enum34 向后移植到 python 2 时都看到了这一点。

IntEnum 或他的元类如何/为什么将元组隐式转换为整数?

最佳答案

我必须查看 enum.py 才能了解发生了什么。事实上,当您输入一个不是元组的值时,它会被转换为(value,),如果是一个元组,它会保持不变。然后对于 IntEnum,实际值是用 int(*args) 计算的。

好的,现在发生了什么:

  • 如果你给出一个简单的 int :int(10) = 10,一切都很好
  • 如果您给出一个包含单个 int 的元组:转换导致相同的情况
  • 如果你给出一个列表:int([...]) 给出一个错误
  • 如果您给出一个元组 (string_value, base) 示例 ('1f', 16) :您正确得到 31 !

    >>> class Animal(IntEnum):
    dog = '1F', 16
    cat = 5

    >>> Animal.dog.value
    31

但我在模块文档中找不到它的任何踪迹,我认为它必须被视为实现细节......

关于python - 为什么 IntEnum 不关心我是否使用元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26124866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com