关于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
相关产品推荐
相关产品推荐

