首页 文章

python C api:如何使用“list(...)”运算符

提问于
浏览
0

我已经使用 PyTypeObject 等定义了一个python类型...我已经定义了一个 .tp_str 来支持 str(myObj) 功能......因为我的类型也有类似 [list] 的行为......我也想支持 list(myObj) 功能 . 我的问题是我错过了一个支持这个的 .tp_list 条目 .

我的问题......我怎么能这样做?

谢谢

1 回答

  • 2

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

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

    除了迭代之外,如果你的对象真的应该是列表式的,你也应该实现sequence protocol .

相关问题