我目前正在学习如何使用Python编写Python (v3.5)扩展模块。有些操作,如快速数值工作,最好在C中完成,而其他操作,如字符串操作,则更容易在Python中实现。是否有一致同意的方式使用Python和C代码来定义新类型?
例如,我用C编写了一个支持基本存储和算术操作的Matrix类型。我想使用Matrix.__str__定义,在这里字符串操作要容易得多,我不需要担心cstring。
当模块加载到__str__中时,我试图定义__init__.py方法,如下所示:
from mymodule._mymodule import Matrix;
def as_str(self):
print("This is a matrix!");
Matrix.__str__ = as_str;当我运行这段代码时,我会得到一个TypeError: can't set attributes of built-in/extension type 'matey.Matrix'。有什么可以接受的方法吗?如果解决方案是将Matrix子类改为子类,那么将我的C基类/ Python子类组织在一个模块中的最佳方法是什么?
发布于 2016-10-29 04:22:30
就我个人而言,我不会尝试在C中做面向对象的事情。我会坚持编写一个公开一些(无状态)函数的模块。
如果我希望Python接口是面向对象的,我会用Python编写一个类,它导入(C扩展)模块并使用它的函数。任何状态的维护都是用Python完成的。
发布于 2016-10-29 15:10:55
您可以定义一个_Matrix类型,然后使用传统的OOP方法进行扩展。
from mymodule._mymodule import _Matrix;
class Matrix(_Matrix):
def __str__(self):
return "This is a matrix!"https://stackoverflow.com/questions/40315976
复制相似问题