Jel*_*lle 8 c python python-c-api
我正在努力如何在 Python C API 中创建 python Enum 对象。enum 类已赋值tp_base给PyEnum_Type,因此它继承了 Enum 。但是,我无法找到一种方法来告诉 Enum 基类枚举中有哪些项目。我想允许使用__members__每个 Python 枚举提供的属性从 Python 进行迭代和查找。
谢谢你,
耶勒
这根本就不简单。这Enum是一个使用Python 元类的Python 类。可以用 C 创建它,但它只是模拟用 C 构建 Python 代码 - 最终结果是相同的,虽然它稍微加快了速度,但您很可能在每个程序运行中只运行一次代码。
无论如何,这是可能的,但这并不容易。我将展示如何在 Python 中执行此操作:
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color)
print(Color.RED)
Run Code Online (Sandbox Code Playgroud)
是相同的:
from enum import Enum
name = 'Color'
bases = (Enum,)
enum_meta = type(Enum)
namespace = enum_meta.__prepare__(name, bases)
namespace['RED'] = 1
namespace['GREEN'] = 2
namespace['BLUE'] = 3
Color = enum_meta(name, bases, namespace)
print(Color)
print(Color.RED)
Run Code Online (Sandbox Code Playgroud)
后者是您需要翻译成 C 的代码。
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |