あなたは非常に簡単に(私は実際にコミット疑う同じを使用することができます(簡単に)は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)
を作成することができるクラスを作成することができますもしあなたがもっと徹底したいのであれば、初期化を防ぐ他の方法があります。例えばCythonモジュール内のcdefグローバル変数をフラグとして使うことができます。これはPythonからアクセスされません) 。
まだこのクラスにはPythonリファレンスカウントメカニズムが組み込まれているため、まだ「Pythonクラス」です。それを避けたいのであれば、cdef struct
を使うことができますが(メンバー関数を持つことはできません)。
私は、cdef cppclassでC++クラスを書くことが可能であることを発見しました。ただし、デストラクタ関数、オーバーロードコンストラクタなどの多くのC++機能はサポートされていません。将来のバージョンでサポートされるかもしれませんか? – iuradz