ホームページ > バックエンド開発 > Python チュートリアル > オブジェクト指向プログラミングにおける共有クラス データの問題を回避するにはどうすればよいですか?

オブジェクト指向プログラミングにおける共有クラス データの問題を回避するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-04 15:13:43
オリジナル
830 人が閲覧しました

How Can I Avoid Shared Class Data Issues in Object-Oriented Programming?

クラス データの共有問題の克服

オブジェクト指向プログラミングでは、インスタンスごとにクラス データを区別しておくことが望ましいです。ただし、クラス データがインスタンス間で誤って共有され、予期しない動作が引き起こされる場合に一般的な問題が発生します。

問題:

次のコードを考えてみましょう:

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]
ログイン後にコピー

この例では、クラス a のインスタンス x と y が同じリストを共有します。その結果、要素を x.list に追加すると、要素が y.list にも追加され、意図した動作に違反します。

解決策:

クラス データの共有を防ぐには、インスタンス メンバーは、クラス宣言ではなく、個々のインスタンス メソッド内で宣言する必要があります。 Python では、通常、__init__ メソッドがこの目的に使用されます。

class a:
    def __init__(self):
        self.list = []
ログイン後にコピー

__init__ メソッド内でリスト変数を初期化すると、 a の各インスタンスがリストの独自の独立したコピーを持つようになります。

期待される動作:

この変更により、意図した動作が可能になります。

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]
ログイン後にコピー

このアプローチを使用してクラス データを分離すると、各インスタンスが独自の一意のデータ セットを持つことが保証され、インスタンス間での共有データの問題が排除されます。

以上がオブジェクト指向プログラミングにおける共有クラス データの問題を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート