1

重複の可能性:
Pythonのインスタンス変数とクラス変数

これら2つの状況の違いは何ですか?Pythonではどのように扱われますか?

Ex1

class MyClass:
     anArray = {}

Ex2

class MyClass:
     __init__(self):
          self.anArray = {}

最初の例では、配列が静的変数のように扱われているようです。Pythonはこれをどのように扱い、その理由は何ですか?

4

2 に答える 2

5

最初の例ではanArray(Pythonでは配列ではなく辞書と呼ばれます)はクラス属性です。を使用してアクセスできますMyClass.anArray。クラスが定義されるとすぐに存在します。

2番目の例でanArrayは、はインスタンス属性です。を使用してアクセスできますMyClass().anArray。(ただし、これを行うと、MyClass作成されたインスタンスが破棄されることに注意してください。より適切な例はmc = MyClass(); mc.anArray['a'] = 5です。)クラスのインスタンスが作成されるまで存在しません。

于 2012-05-01T04:06:46.007 に答える
0

異なるエリアとして宣言されています。Ex1はグローバル変数または静的変数のようなものです。

obj = MyClass()
obj2 = MyClass()
print "IS one instance ", id(obj.anArray) == id(obj2.anArray)

Ex2はローカル属性です。

obj = MyClass()
obj2 = MyClass()
print "IS one instance ", id(obj.anArray) == id(obj2.anArray)
于 2012-05-01T04:08:11.290 に答える