CPython C ++のPythonクラスで静的メソッドまたは変数を指定するにはどうすればよいですか?
PyTypeObject構造では、tp_getset、tp_methods、tp_membersはすべてクラスのインスタンスを想定しているようです。
どうもありがとう、ロブ。
静的メソッドとクラス メソッドは、構造体のフィールドにorをtp_methods追加することで定義できます。これはデコレータと同等です。METH_STATICMETH_CLASSml_flagsPyMethodDef@staticmethod@classmethod
メソッドの最初のパラメーター (通常はインスタンス ポインター) はNULL、静的メソッドおよびPyTypeObject*クラス メソッド用になります。
http://docs.python.org/c-api/structures.html#PyMethodDef
(モジュールの初期化関数で)tp_dictを呼び出す前に、これらの属性を持つ辞書に を設定することで、クラス属性を追加できます。PyType_Ready()または、そのtp_dictままにNULLしておくこともできます。その場合PyType_Ready()は、辞書が作成されます。その後、その辞書に属性を追加できます。
http://docs.python.org/c-api/typeobj.html#tp_dict
計算されたクラス属性には、Python とまったく同じように記述子クラスが必要です。tp_dict記述子のインスタンスは、他のクラス属性と同様に追加する必要があります。