首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python和C中定义Python类

在Python和C中定义Python类
EN

Stack Overflow用户
提问于 2016-10-29 04:17:19
回答 2查看 163关注 0票数 0

我目前正在学习如何使用Python编写Python (v3.5)扩展模块。有些操作,如快速数值工作,最好在C中完成,而其他操作,如字符串操作,则更容易在Python中实现。是否有一致同意的方式使用Python和C代码来定义新类型?

例如,我用C编写了一个支持基本存储和算术操作的Matrix类型。我想使用Matrix.__str__定义,在这里字符串操作要容易得多,我不需要担心cstring。

当模块加载到__str__中时,我试图定义__init__.py方法,如下所示:

代码语言:javascript
复制
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子类组织在一个模块中的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-29 04:22:30

就我个人而言,我不会尝试在C中做面向对象的事情。我会坚持编写一个公开一些(无状态)函数的模块。

如果我希望Python接口是面向对象的,我会用Python编写一个类,它导入(C扩展)模块并使用它的函数。任何状态的维护都是用Python完成的。

票数 0
EN

Stack Overflow用户

发布于 2016-10-29 15:10:55

您可以定义一个_Matrix类型,然后使用传统的OOP方法进行扩展。

代码语言:javascript
复制
from mymodule._mymodule import _Matrix;

class Matrix(_Matrix):
    def __str__(self):
        return "This is a matrix!"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40315976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档