首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能用Cython编写“纯”c++类?

有没有可能用Cython编写“纯”c++类?
EN

Stack Overflow用户
提问于 2016-03-28 16:03:41
回答 1查看 445关注 0票数 3

在Cython中,类或扩展类型是Python类,这意味着它可以由Python初始化。另一方面,它的__init____cinit__的参数必须是Python对象。

有没有可能用Cython编写一个类,它只能由cdef函数初始化,因此可以由C类型和C++对象初始化?

我之所以这样做,是因为将我现有的Python代码转换成Cython代码要比C/C++代码更容易。

EN

回答 1

Stack Overflow用户

发布于 2016-03-28 18:02:02

您可以很容易地创建一个类,该类不能(很容易)从Python初始化,但只能从cdef工厂函数创建

代码语言:javascript
复制
cdef class ExampleNoPyInit:
    cdef int value

    def __init__(self):
        raise RuntimeError("Cannot be initialise from python")

cdef ExampleNoPyInit_factory(int v):
    cdef ExampleNoPyInit a

    # bypass __init__
    a = ExampleNoPyInit.__new__(ExampleNoPyInit) 
    a.value = v
    return a

inst = ExampleNoPyInit_factory(5)

(我怀疑,如果他们愿意的话,真正承诺的人可以使用相同的方法在Python中初始化它。如果你想更彻底,还有其他方法来阻止初始化-例如,你可以在你的Cython模块中使用cdef全局变量作为标志,这将不能从Python访问)。

这个类仍然有内置的Python引用计数机制,所以仍然是一个"Python类“。如果你想避免这种情况,那么你可以使用cdef struct (尽管它不能有成员函数)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36258343

复制
相关文章

相似问题

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