C PyObject構造には、フィールドとが含まれてtp_as_number
いtp_as_sequence
ますtp_as_mapping
。これらはどのような状況で呼び出されますか?これらのCメソッドが呼び出される結果となるPythonコードの例を誰かが提供できますか?
1 に答える
これらのメソッドは python の特別なメソッドと同等であり、同じ状況で呼び出されます。たとえばtp_as_number->nb_add
、実行時に呼び出されa + b
、a
拡張タイプです。と同等です__add__
。inplace_*
関数はメソッドと同等です__i*__
。
__r*__
メソッドは引数を通常の関数に交換するだけで実装されていることに注意してください。したがって5 + a
、a
拡張型は最初に の数値バージョンを呼び出そうとします。これがnb_add
失敗した後、最初の引数と2 番目の引数として配置しようとします。nb_add
a
5
a
tp_as_mapping
and構造体についても同様ですtp_as_sequence
。および関数は組み込み関数 によって呼び出され、mp_length
と同等です。理論的には、とに異なる関数を実装できます。その場合、が優先されます (この動作が文書化されているかどうかはわかりませんが、これはソース コードから確認できます)。sq_length
len
__len__
mp_length
sq_length
sq_length
また、たとえば、+
演算子はさまざまな関数で実装できることに注意してください。はsq_concat
を試行した後に呼び出されるnb_add
ため、拡張型は関数を設定+
しなくても演算子をサポートできます。nb_add