我目前正在学习如何使用Python C API编写Python(v3.5)扩展模块。一些操作,如快速数字工作,最好用C语言完成,而其他操作,如字符串操作,在Python中更容易实现。是否有同意的方法来使用Python和C代码来定义新类型?
例如,我在C中编写了Matrix
类型,支持基本存储和算术运算。我想使用Python定义Matrix.__str__
,其中字符串操作更容易,我不需要担心cstrings。
我在__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子类的最佳方法是什么?
答案 0 :(得分:0)
就个人而言,我不会尝试在C中尝试使用面向对象的东西。我会坚持编写一个暴露某些(无状态)函数的模块。
如果我希望Python接口是面向对象的,我会在Python中编写一个类,它导入那个(C扩展)模块并从中消耗函数。任何状态的维护都将在Python中完成。
答案 1 :(得分:0)
您可以改为定义_Matrix
类型,然后使用传统的OOP方法扩展
from mymodule._mymodule import _Matrix;
class Matrix(_Matrix):
def __str__(self):
return "This is a matrix!"