__slots__Pythonでどのように実装されていますか?- これはCインターフェイスで公開されていますか?
__slots__CでPythonクラスを定義するときに動作を取得するにはどうすればよいPyTypeObjectですか?
1 に答える
Pythonクラスを作成する場合、デフォルトで。があり、__dict__任意の属性を設定できます。スロットのポイントは、__dict__スペースを節約するためにを作成しないことです。
Cインターフェースでは、その逆で、拡張クラスにはデフォルトでno__dict__があり、代わりに明示的に1つ追加し、それを処理するためにgetattr / setattrサポートを追加する必要があります(ただし、幸いなことに、これにはすでにメソッドがありPyObject_GenericGetAttrますPyObject_GenericSetAttr。それらを実装する必要はありません。使用するだけです(ただし、PyObject_GenericDelAttrはありませんが、それが何であるかはわかりません(おそらく、このような括弧のネストを停止する必要があります(またはしない))))。
したがって、スロットは不要であり、拡張タイプには意味がありません。デフォルトでは、getattr/setatttrメソッドにクラスが持つ属性のみにアクセスさせるだけです。
実装方法については、コードはtypeobject.cにあり、「オブジェクトに__slots__属性がある場合は、作成しないでください__dict__。非常に刺激的ではありません。:-)