1

私は完全なPython初心者なので、私の質問はばかげているように見えるかもしれません. Python でオブジェクト属性に値を割り当てるには、次の 2 つの方法があることを確認しました。

使用__dict__:

class A(object):

    def __init__(self,a,b):
        self.__dict__['a'] = a
        self.__dict__['b'] = b

なし__dict__:

class A(object):

    def __init__(self,a,b):
        self.a = a
        self.b = b

どこが違うのか誰でも説明できますか?

4

2 に答える 2

10

属性を動的に設定し、記述子または.__setattr__()フックをバイパスする必要がない限り、属性を に直接割り当てないでください.__dict__

クラスがメモリを節約するために属性を定義した場合でも、すべてのインスタンスに属性があるわけではありませ.__dict__.__slots__

.__setattr__()属性を動的に設定する必要があるが、記述子またはフックをバイパスする必要がない場合は、通常どおりsetattr()関数を使用します。

于 2013-08-05T18:17:14.167 に答える
2

Pythonのドキュメントから:

クラス型 (新しいスタイルのクラス) とクラス オブジェクト (古いスタイル/クラシック クラス) はどちらも、通常、クラス定義によって作成されます (セクション クラス定義を参照してください)。クラスには、ディクショナリ オブジェクトによって実装される名前空間があります。クラス属性参照は、このディクショナリ内のルックアップに変換されます。たとえば、C.xに変換されますC.__dict__["x"] (ただし、特に新しいスタイルのクラスの場合、属性を見つける他の手段を可能にするフックがいくつかあります)。

新しい要素をクラスに割り当てるより一般的な方法は、2 番目の例です。これにより、多数のカスタマイズ ( __seattr____getattr__など) が可能になります。

于 2013-08-05T18:23:52.983 に答える