我需要从我用 Cython 模块包装的 C 库中公开一个类似文件的对象。我想将 python 的通用 io 代码重用于缓冲、readline() 等内容。
新的 IO 模块似乎正是我所需要的,但实际上从 Cython 使用它似乎并不简单,我尝试了几种方法:
我在从 IO.RawIOBase 继承的 cdef 类中的代码 - 这失败了,因为 cdef 类只能从其他 cython cdef 类继承,而 IO 是“原始”C。
我在 cdef 类中的代码,另一个(非 cdef)类继承了我的 cdef 类和 RawIOBase - 失败并显示“TypeError:多个基础有实例布局冲突”
我在从 RawIOBase 继承的(非 cdef)类中的代码 - 这有效,但我失去了在类中存储我的 c 级别(我需要与底层库对话)东西的能力,所以我需要一个 make围绕它的 cdef 包装器并将其存储为成员......这看起来像一团糟。
我在 cdef 类中的代码不继承 (Raw)IOBase 而是重新实现了它的功能,Python 代码将我的对象包装在 BufferedReader/BufferedWriter 中 - 这个似乎工作并且比前一个选项更不混乱。
我的问题:
1)我错过了什么并在这里重新发明轮子吗?
2) 为了让 BufferedReader/Writer 在当前和未来版本的 python 中对我的对象感到满意,我需要实现哪些来自 IOBase 的确切内容?这在任何地方都有记录吗?
3)在 IO 是纯 python 的 python 2.6 中,这将如何工作?我想性能会受到影响,但它会起作用,对吧?