3

クラスと、そのクラスのインスタンスを作成する関数を定義します。この関数は毎回新しいインスタンスを作成する必要があると思いました。ただし、最後の呼び出しからコンテンツを「継承」しているようです。誰でもこれを説明できますか?ありがとう!

class test:
    a = []
    def b(self,x):
        self.a.append(x)

def add():
    t = test()
    t.b(2)
    return t

if __name__ == '__main__':
    print add().a
    print add().a
    print add().a

出力:

[2]
[2, 2]
[2, 2, 2]
4

2 に答える 2

4

インスタンス変数の定義は次のようになりaます。

class test(object):
    def __init__(self):
        self.a = []

以前aは、インスタンス変数として宣言されていたのではなく、クラスのすべてのインスタンスで共有されていたクラス変数として宣言されていました。

于 2013-06-21T03:08:53.517 に答える
3

クラス変数aとして定義しました。クラスのインスタンスにバインドされているのではなく、クラス自体にバインドされているため、クラスのインスタンス間で「共有」されるリストは 1 つだけです。

インスタンス変数にする必要があります。

class test:
    def b(self, x):
        self.a = []
        self.a.append(x)

objectまた、新しいスタイルのクラスを利用するには、から継承する必要があります。

class test(object):
于 2013-06-21T03:14:10.133 に答える