先放代码:(python2.7.10)
class Res(object):
x = []
def __init__(self, t):
for i in t:
self.x.append(i)
A = Res(['a', 1])
B = Res(['b', 2])
print A.x
print B.x
输出结果是:
['a', 1, 'b', 2]
['a', 1, 'b', 2]
按理说不应该各是各的吗?
改成下面这种形式就好了
def __init__(self, t):
self.x = t
输出:
['a', 1]
['b', 2]
请问这个问题是 list.append() 导致的吗?
黄舟2017-04-17 17:54:36
ここで基本的なチュートリアルを読んでください
リーリー ここでのx はインスタンス変数ではなく、クラス変数です。クラス変数とインスタンス変数の違いは、前者はすべてのオブジェクトに共通であるのに対し、後者は各インスタンスに属することです。
self.x.append(i) が x を逆参照するとき、最初にメンバー変数を逆参照しますが、以前に x という名前のメンバー変数を初期化していないため、最後の逆参照はクラス変数です
大家讲道理2017-04-17 17:54:36
リーリー
@zwillon が言ったように、コード内の self.x がインスタンス属性を見つけられない場合、上位レベルのクラス属性が使用されます。 上記のようにインスタンス プロパティを記述するのが正しいアプローチです。