首页 > 解决方案 > python C api:如何使用“list(…)”运算符

问题描述

PyTypeObject我已经使用etc定义了一个 python 类型……并且我已经定义了一个.tp_str来支持这个str(myObj)特性……因为我的类型也有一个类似[list]的行为……我也想支持这个list(myObj)特性。我的问题是我错过了.tp_list支持这一点的条目。

我的问题……我该怎么做?

谢谢

标签: pythonpython-3.x

解决方案


Python 级别也没有__list__钩子。就像在 Python 级别实现相同的行为一样,您必须使类的实例可迭代。list(yourobj)然后将遍历您的对象以将元素收集到列表中。

__iter__与和对应的 C 级插槽__next__tp_iter和,它们的工作方式与和tp_iternext非常相似。如果您之前没有手动编写过迭代器类,我建议您在使用 C 之前先在 Python 中进行练习(并记住迭代器应该是与您的类似列表的对象不同的对象)。__iter____next__

除了迭代之外,如果您的对象确实应该是类似列表的,您还应该实现序列协议。


推荐阅读