__cinit__
C ++クラスをラップするときにcythonのメソッドをオーバーロードできないという問題に取り組むための標準化された(または一般的に受け入れられている方法)はありますか?
__cinit__
*argsと**kwargsにパラメータを含め、__cinit__
スコープ内で特定のパターンに従ってC++インスタンスを生成する方法を選択する可能性があります。ただし、このアプローチには複雑な問題があります。
- 引数に名前を付けてkwargsとして渡さない限り、引数から正しいコンストラクターを識別しようとすると危険な場合があります。これは、ユーザーにとって煩わしいものになる可能性があります。
- 引数が引数リスト内の型によって呼び出されない場合
__cinit__
、それらはPythonオブジェクトとして渡されます。私の作業の場合、引数はC ++クラスのPythonラッパーであり、これらのインスタンス「thisptr」を取得しようとすることは、*argsまたは**kwargsからPythonオブジェクトとして渡されるときの悪魔の仕事です。 - 引数の組み合わせからC++コンストラクターを選択するためにif...elif ... elseケースのシーケンスを使用するという暗黙の必要性は、最終的には非常に厄介になります。
したがって、より良い方法が必要です。1つの方法は、classmethodアプローチを使用することです(例:Pythonで動作をオーバーロードするclassmethodを__init__
参照)。それにもかかわらず、私が知る限り(そして私が間違っている場合は訂正してください)、classmethodはクラス名とは異なる名前のメソッドを呼び出すことを意味し、これは1つのクラス名だけでインスタンスを構築するC++の方法とはよく似ていません。
これについて何かアイデアはありますか?