5

Pythonのクラス変数について疑問があります。私の理解では、__init__()関数の外部で宣言されているクラス変数を定義すると、この変数は C++ で静的変数として 1 回だけ作成されます。

これは、dict や list 型などの一部の python 型では正しいように見えますが、int、float などの基本型では同じではありません。

例えば:

class A:
    dict1={}
    list1=list()
    int1=3

    def add_stuff(self, k, v):
        self.dict1[k]=v
        self.list1.append(k)
        self.int1=k

    def print_stuff(self):
        print self.dict1,self.list1,self.int1

a1 = A()
a1.add_stuff(1, 2)
a1.print_stuff()
a2=A()
a2.print_stuff()

出力は次のとおりです。

{1: 2} [1] 1
{1: 2} [1] 3

dict1 と list1 の結果はわかりましたが、int1 の動作が異なるのはなぜですか?

4

1 に答える 1

7

違いは、に割り当てないself.dict1self.list1、クラスからこれらのフィールドを読み取るだけであるのに対し、に割り当てるとself.int1、クラスフィールドを非表示にするインスタンスフィールドが作成されることです。

于 2010-05-19T12:50:56.323 に答える