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

Python枚举成员为何会出现所有成员作为属性的无限递归现象?

Python枚举成员可无限链式访问的原因

这其实是Python标准库Enum类的刻意设计,核心逻辑如下:

  1. 枚举实例的全局成员映射
    Python的Enum类在生成枚举实例时,会把整个枚举类的所有成员(包括自身)存入每个实例的内部成员映射(对应__members__属性)里。同时为了访问便捷,Enum实现了属性代理机制——当你通过枚举实例访问某个成员名(比如t1.m2)时,它会直接从这个内部映射里取出对应的枚举实例返回。

  2. 无重复创建的链式访问
    每次链式访问(比如t1.m2.m3),本质都是从当前枚举实例的成员映射里获取已存在的枚举实例,并不会生成新对象。所以不管你链式访问多少次,每次拿到的都是原枚举类中定义好的成员实例,自然能一直“链式跳转”下去,直到你访问.value这类属性拿到具体值。

拿你给出的代码举例:

from enum import Enum

class TT(Enum):
    m1 = 1
    m2 = 2
    m3 = 3
    
t1 = TT['m1']
t1.m2.m3.m3.m1.m2.m2.m1.m3.value
>>> 3

t1.m2返回的是TT.m2实例,TT.m2.m3返回TT.m3实例,后续的链式访问都是重复这个取值过程,最后.value读取的就是TT.m3对应的数值3。

这种设计的目的是让枚举实例具备和枚举类一致的成员访问能力,让代码更直观易读。

内容的提问来源于stack exchange,提问作者mahkitah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:33:16