gpt4 book ai didi

cython - 是否可以在 Cython 中编写 "pure"c++ 类?

转载 作者:行者123 更新时间:2023-12-04 18:00:22 25 4
gpt4 key购买 nike

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

是否可以在 Cython 中编写一个只能由 cdef 函数初始化的类,从而可以由 C 类型和 C++ 对象初始化?

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

最佳答案

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

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)

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

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

关于cython - 是否可以在 Cython 中编写 "pure"c++ 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36258343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com