CPython C ++のPythonクラスで静的メソッドまたは変数を指定するにはどうすればよいですか?
PyTypeObject構造では、tp_getset、tp_methods、tp_membersはすべてクラスのインスタンスを想定しているようです。
どうもありがとう、ロブ。
静的メソッドとクラス メソッドは、構造体のフィールドにorをtp_methods
追加することで定義できます。これはデコレータと同等です。METH_STATIC
METH_CLASS
ml_flags
PyMethodDef
@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
記述子のインスタンスは、他のクラス属性と同様に追加する必要があります。