python - python C api:如何使用“list(…)”运算符
问题描述
PyTypeObject
我已经使用etc定义了一个 python 类型……并且我已经定义了一个.tp_str
来支持这个str(myObj)
特性……因为我的类型也有一个类似[list]的行为……我也想支持这个list(myObj)
特性。我的问题是我错过了.tp_list
支持这一点的条目。
我的问题……我该怎么做?
谢谢
解决方案
Python 级别也没有__list__
钩子。就像在 Python 级别实现相同的行为一样,您必须使类的实例可迭代。list(yourobj)
然后将遍历您的对象以将元素收集到列表中。
__iter__
与和对应的 C 级插槽__next__
是tp_iter
和,它们的工作方式与和tp_iternext
非常相似。如果您之前没有手动编写过迭代器类,我建议您在使用 C 之前先在 Python 中进行练习(并记住迭代器应该是与您的类似列表的对象不同的对象)。__iter__
__next__
除了迭代之外,如果您的对象确实应该是类似列表的,您还应该实现序列协议。
推荐阅读
- perl - 如何在 Perl 中解析多行记录?
- java - Javafx 图表中的错误:添加了重复系列。为什么?
- .net - vb.net 3.5 - 在屏幕键盘上编写其他进程
- docker - 在安装在 docker 下的 nfs 上提供 http 内容
- mysql - SQL 日期不是相对的
- reactjs - 如果组件在状态中接收到相同的值,是否会重新渲染组件
- php - 在 IE 中无法读取 Cookie
- java - 在 JPA 中选择日期范围
- python - 我正在尝试在 Python 中使用 imaplib 从服务器获取电子邮件,但它没有打印任何内容
- squish - 是否有停止在 squish 中运行的捷径?