インスタンス間でのクラス データの共有の防止
オブジェクト指向プログラミングでは、クラスのさまざまなインスタンスに対して個別のデータを維持することが重要です。ただし、デフォルトでは、クラスレベル変数はすべてのインスタンス間で共有されるため、予期しない動作が発生する可能性があります。
問題を理解する
次のコードを検討してください:
class a: list = [] x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 2, 3, 4] print(y.list) # prints [1, 2, 3, 4]
x と y の個別のリストを取得する代わりに、両方のインスタンスが同じリストを共有します。これは、リストがクラス変数として宣言されているため、すべてのインスタンスが同じ基礎となるオブジェクトを参照するために発生します。
解決策: インスタンス変数
データの共有を回避するには、インスタンス変数を使用する必要があります。活用される。インスタンス変数は、クラスのコンストラクター (__init__) 内で定義されます。修正されたコードは次のとおりです。
class a: def __init__(self): self.list = [] x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 3] print(y.list) # prints [2, 4]
この場合、list 属性はコンストラクター内のインスタンスごとに初期化され、個別のコピーが作成されます。 print ステートメントは、x と y の個別のリストを使用して意図した動作を正確に反映するようになりました。
以上がPython のオブジェクト インスタンス間でクラス データが共有されるのを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。