を述べたとき、私は私が働いているプロジェクトに基づくPython用修正リストクラスを作ってみましたと Cythonの拡張モジュールのクラスのメソッドは見えない/
Cython
でそれをスピードアップしようとすることを決定した名前のエラーを与えます私の最初の試みでは、クラスの関数(特殊関数を除く)のほとんどが可視でなく、アクセスできませんでした。私は、メソッドの名前をcdef、cpdef、defでバウンドしようとしました私は正しい構文を持っているかどうか、また他の誰かが似たような問題を抱えているかどうかを調べるためにグーグルで試みました。
ここに私のコードはあります:
class list_2:
cpdef append(self , object item):
self._lst = array(self + [item])
cpdef pop(self,int index = -1):
temp_lst = array(range(len(self) -1))
if index > len(self)-1 and index >= 0 or index*(-1) > len(len) and index < 0:
raise IndexError
else:
if index <0:
index = index*(-1)-1
for x in range(len(self)):
if x!= index:
temp_lst[i] = self[x]
i+=1
self._lst = temp_lst
クラスを 'class list_2'と宣言したようです。代わりに、それがcython拡張型であるためには 'cdef class list_2'と宣言する必要があります。さもなければ、cythonはそれを通常のpythonクラスとして扱います。このドキュメントの[このリンク](http://cython.readthedocs.io/ja/latest/src/tutorial/cdef_classes.html)は、cythonクラスについて学ぶのに役立ちます。 – CodeSurgeon
また、リストクラスを再実装しようとすると必ず期待されるパフォーマンス上の利点が得られるかどうかはわかりません。データがすべて単一の型である場合は、cythonの型付きメモリビューを使用するか、代わりにCの配列とポインタを使用することを検討することもできます。なぜ修正リストクラスの作成に興味があるのかを知ることは役に立ちます。 – CodeSurgeon
@CodeSurgeonまあ、私が言及したと思うように、クラス宣言に 'cdef'、' cpdef'、 'def'を試してみましたが、それらの関数はクラスに含まれていないという同じ結果を与えてくれました 正に、私はこのクラスをCythonとPythonの練習用にしようとしています 他のアドバイスがあれば幸いです –