作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
注意到有人写了这样一个枚举:
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(10) = 10
,一切都很好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/
我一直在学习如何创建自定义 ArrayAdapter 并熟悉重写 ArrayAdapter 的 getViewTypeCount 和 getItemViewType 方法。 为什么 Android V
我是一名优秀的程序员,十分优秀!