歓迎されています
私は複雑さのために、2.5のオプションは、あると思う:
ちょうどそれを定義するC関数を見つけるCのAPIを使用している場合チャンスはあなたがCで実装された既知のクラスから継承しています。その場合には、メソッドを呼び出してその呼び出しを行います。
:
は、オブジェクトからクラス、クラスからベースを取得します。 PyObject* baseclass = self->ob_type->tp_base;
b。 super()
のCのAPIに相当使用します
:ベースで
PyObject* baseclass = PyObject_CallFunctionObjArgs(&PySuper_Type,self->ob_type,self,NULL);
をあなたは、関連する機能を得るためにGETATTRのCのAPIと同等のものを使用することができました。
/* check baseclass against null */
PyObject* func = PyObject_GetAttrString(baseclass,"function_name");
/* check func is not null */
PyObject* result = PyObject_CallFunctionObjArgs(self,other_arguments..., NULL); /* adjust arguments here */
Py_DECREF(func);
// decref result?
別の方法で呼び出すことはできますが、引き数を使ってselfを渡す必要があります。
オプション2bは、複数の拠点をtp_bases
によって定義されている場合、それが動作するはずですので、おそらく最も柔軟性があります。
おかげDavidW、 あなたの答えは、ジョブの99%をしました。 私はあなたの提案したコードに少し修正を加えなければならなかったので、私は次の答えに私のコードを投稿します。 –