gpt4 book ai didi

python - 使用来自 C 的 Python 2.7 枚举

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:24 25 4
gpt4 key购买 nike

我在 Python 中有一个枚举(将 enum 包反向移植到 2.7),它只包含整数:

import enum
class MyEnum(enum.Enum):
val = 0

假设我在指向 MyEnum.val 的 C 扩展中收到一个 PyObject *。我想要与 PyObject * 关联的整数值。如何最简洁地获得它?

最佳答案

查看 enum34 的来源向后移植,就像 enum 3.4+ 中的模块,它是纯 Python,不做任何公开自定义 C API 的事情。

因此,您只需使用 PyObject_GetAttr和 friend 访问类属性。特别是,如果您有一个 MyEnum.val,您需要获取它的 value 属性,这将是一个 int,然后您可以PyInt_AsLong

这与 Python 中的工作方式相同。如果您尝试在需要 int 的地方使用 MyEnum.val,您应该得到一个 TypeError;如果您尝试显式调用 int(MyEnum.val),您将肯定得到一个TypeError。所以,虽然我还没有测试过,PyInt_AsLong 直接在常量上而不是它的 value 应该引发一个 TypeError 并返回 -1。

如果你想要枚举常量像 int 的子类型,那么,作为 enum文档解释,你想要IntEnum .通常,这并不是您真正想要的(正如文档所解释的),但如果是,那当然可以。并且您应该能够 PyInt_CheckPyInt_AsLong 一个 IntEnum 值(尽管我还没有测试过)。

关于python - 使用来自 C 的 Python 2.7 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30148641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com