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

如何将Python嵌套枚举的成员导出到包含它的类中?

解决嵌套枚举成员直接访问的方案

你可以用以下几种方式避免手动逐个赋值枚举成员,直接将嵌套枚举的成员提升为外层类的属性:

1. 批量遍历枚举成员注入

利用枚举类的__members__属性(存储所有枚举成员的字典),在类定义时循环注入:

import enum

class Foo:
    class State(enum.Enum):
        Unloaded = enum.auto()
        Loaded = enum.auto()
        Processed = enum.auto()

    # 批量将State的成员赋值给Foo类
    for name, member in State.__members__.items():
        locals()[name] = member

    state: State

这样后续直接用Foo.Unloaded、foo.state = Foo.Loaded即可,新增枚举值时也无需修改注入代码。

2. 用元类实现通用逻辑

如果多个类都需要这种枚举成员提升的功能,写一个元类来统一处理,避免重复代码:

import enum

class EnumPromoterMeta(type):
    def __new__(cls, name, bases, namespace):
        # 遍历类命名空间中的所有枚举类
        for attr_name, attr in list(namespace.items()):
            if isinstance(attr, enum.EnumMeta):
                # 将枚举成员注入到外层类
                for enum_name, enum_member in attr.__members__.items():
                    namespace[enum_name] = enum_member
        return super().__new__(cls, name, bases, namespace)

class Foo(metaclass=EnumPromoterMeta):
    class State(enum.Enum):
        Unloaded = enum.auto()
        Loaded = enum.auto()
        Processed = enum.auto()

    state: State

后续其他类只要继承这个元类,嵌套的枚举成员会自动被提升到外层类中,扩展性更强。

3. 用内部导入简化代码

借助Python的类内相对导入语法,直接导入嵌套枚举的所有成员:

import enum

class Foo:
    class State(enum.Enum):
        Unloaded = enum.auto()
        Loaded = enum.auto()
        Processed = enum.auto()

    # 从嵌套的State枚举导入所有成员
    from __class__.State import *

    state: State

这种写法最简洁,但依赖Python的__class__相对导入语法,在一些老旧Python版本中可能不支持,适合使用较新版本Python的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:22:05