12
4

1 に答える 1

18

Pythonクラスを作成する場合、デフォルトで。があり、__dict__任意の属性を設定できます。スロットのポイントは、__dict__スペースを節約するためにを作成しないことです。

Cインターフェースでは、その逆で、拡張クラスにはデフォルトでno__dict__があり、代わりに明示的に1つ追加し、それを処理するためにgetattr / setattrサポートを追加する必要があります(ただし、幸いなことに、これにはすでにメソッドがありPyObject_GenericGetAttrますPyObject_GenericSetAttr。それらを実装する必要はありません。使用するだけです(ただし、PyObject_GenericDelAttrはありませんが、それが何であるかはわかりません(おそらく、このような括弧のネストを停止する必要があります(またはしない))))。

したがって、スロットは不要であり、拡張タイプには意味がありません。デフォルトでは、getattr/setatttrメソッドにクラスが持つ属性のみにアクセスさせるだけです。

実装方法については、コードはtypeobject.cにあり、「オブジェクトに__slots__属性がある場合は、作成しないでください__dict__。非常に刺激的ではありません。:-)

于 2011-02-20T16:29:27.620 に答える