__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__
。非常に刺激的ではありません。:-)