我已经使用 PyTypeObject 等定义了一个python类型...我已经定义了一个 .tp_str 来支持 str(myObj) 功能......因为我的类型也有类似 [list] 的行为......我也想支持 list(myObj) 功能 . 我的问题是我错过了一个支持这个的 .tp_list 条目 .
PyTypeObject
.tp_str
str(myObj)
list(myObj)
.tp_list
我的问题......我怎么能这样做?
谢谢
Python级别也没有 __list__ 钩子 . 就像在Python级别实现相同的行为一样,您必须使您的类的实例可迭代 . 然后, list(yourobj) 将遍历您的对象以将元素收集到列表中 .
__list__
list(yourobj)
对应于 __iter__ 和 __next__ 的C级插槽是tp_iter和tp_iternext,它们的工作方式与 __iter__ 和 __next__ 非常相似 . 如果您之前没有手动编写迭代器类,我建议在使用C语言之前在Python中进行练习(并记住迭代器应该是与列表类对象不同的对象) .
__iter__
__next__
除了迭代之外,如果你的对象真的应该是列表式的,你也应该实现sequence protocol .
1 回答
Python级别也没有
__list__
钩子 . 就像在Python级别实现相同的行为一样,您必须使您的类的实例可迭代 . 然后,list(yourobj)
将遍历您的对象以将元素收集到列表中 .对应于
__iter__
和__next__
的C级插槽是tp_iter和tp_iternext,它们的工作方式与__iter__
和__next__
非常相似 . 如果您之前没有手动编写迭代器类,我建议在使用C语言之前在Python中进行练习(并记住迭代器应该是与列表类对象不同的对象) .除了迭代之外,如果你的对象真的应该是列表式的,你也应该实现sequence protocol .