You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Enum类__members__及特殊方法对应内置函数的技术疑问

关于Enum的__members__及内置函数与特殊方法对应关系的解答

1. 有没有内置函数可以替代直接访问Enum的__members__?

没有专门针对__members__的内置函数。你可以用getattr()间接获取,比如getattr(MyEnum, '__members__'),但完全没必要——直接写MyEnum.__members__更简洁直观,这也是官方认可的用法。

2. 直接访问__members__合规吗?

完全合规。虽然它是双下划线开头的属性,但Enum的__members__属于公开API的一部分,Python官方文档的示例代码就直接用它来遍历枚举成员、查找特定成员。比如:

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

# 官方示例级用法
for name, member in Color.__members__.items():
    print(name, member)

它本质是由Enum元类生成的mappingproxy,用来存储枚举成员名称到实例的映射,设计出来就是给开发者使用的,放心用就行。

3. 内置函数对应特殊方法的官方资料

Python官方的**数据模型(Data Model)**章节里有完整表格,列出了所有内置操作、函数对应的特殊方法。我整理几个常用的对应关系:

  • getattr(obj, name) → 优先调用obj.__getattribute__(name),触发AttributeError后再调用obj.__getattr__(name)
  • len(obj) → obj.__len__()
  • str(obj) → obj.__str__()
  • repr(obj) → obj.__repr__()
  • obj[key] → obj.__getitem__(key)
  • for item in obj → obj.__iter__()
  • 算术运算如obj + other → obj.__add__(other)

全量对应关系可查阅官方Data Model章节,里面把每个内置行为对应的特殊方法都列得清清楚楚。

内容的提问来源于stack exchange,提问作者Erik van de Ven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:22:06