python - 枚举中实现的哪一部分塑造了“isinstance”的行为?
问题描述
isinstance(x, E)
,当应用于 Enum 的子类E
时,检查第一个参数是否x
是 的成员e
。例如,使用以下定义:
from enum import Enum
class E(Enum):
X = 1
Y = 2
Z = 3
isinstance(E.X, E)
返回True
,但isinstance(1, E)
返回False
。我很困惑Enum
实现如何使这项工作:我什至没有看到__instancecheck__
被覆盖。Enum 实现如何使isinstance
调用以这种方式工作?
解决方案
在运行时没有什么特别需要处理的isinstance
。枚举的特殊行为都是在您从Enum
.
例如。
>>> from enum import Enum
>>> class E(Enum):
... X = 1
... Y = 2
...
>>>
>>> type(E.X)
<enum 'E'>
>>> E.X == 1
False
Enum
hasEnumMeta
作为它的元类,特殊处理是在EnumMeta.__new__
其中构建E
枚举类。除其他外,它的作用是将您定义为整数的所有属性替换为E
具有给定值的实例。
推荐阅读
- google-chrome - 性能选项卡显示非常浅的堆栈
- azure-data-factory - 无法在 ADFv2 中为 Tumbling Window 触发器依赖项指定窗口
- python-3.x - 使用 f 字符串限制复杂字符串长度
- python - KeyError 更改数据框中的列
- excel - 用于聚合值和向下钻取的 VBA
- java - Java ClassLoader.getResource(String name) 找到目录但其中没有文件
- apache-kafka - 属性文件中关于 num.partitions 的行为
- ios - 将 RN FFMPEG 集成到本机反应中时出错
- python - 回到主菜单时,诅咒 Python 不清理窗口
- php - 如何在php的第一行之前获得总计/总和