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

如何通过SWIG实现C++ enum class转为Python风格枚举访问?

如何让SWIG生成的C++枚举类支持Python原生枚举风格访问

默认情况下,SWIG处理C++的enum class时,会直接把枚举值暴露在模块的根命名空间下,就像你遇到的impl.RED这种方式,没法用Python原生枚举那样的层级访问。不过我们可以通过SWIG的特性来解决这个问题,让生成的Python接口和原生枚举用法一致。

方法:使用SWIG的%feature("python:enum")指令

修改你的SWIG接口文件,添加%feature("python:enum")来指定要转成Python Enum类的C++枚举:

%module api
%{
#include "example.h"
%}

// 配置SWIG将colors::Color转换成Python Enum子类
%feature("python:enum") colors::Color;

%include "example.h"

重新用SWIG生成接口文件并编译后,你就能像使用Python原生枚举一样访问了:

import api

# 直接访问枚举成员
print(api.Color.RED)
# 获取枚举值
print(api.Color.RED.value)
# 也可以通过值反向查找枚举
print(api.Color(0))  # 输出 <Color.RED: 0>

注意事项

  • 这个特性需要SWIG 3.0及以上版本的支持,如果你用的是老版本,可能需要先升级SWIG。
  • 如果你还有其他枚举类需要处理,只需要给每个枚举类添加对应的%feature("python:enum")行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:58:04