ホームページ >バックエンド開発 >Python チュートリアル >違いは何ですか: Python のインスタンス属性とクラス属性?

違いは何ですか: Python のインスタンス属性とクラス属性?

DDD
DDDオリジナル
2024-10-27 06:40:29448ブラウズ

  What's the Difference: Instance vs. Class Attributes in Python?

クラスの __init__() 内外の変数定義の影響

Python では、コンストラクター関数 __init__() 内で宣言されたクラス変数が次のような影響を及ぼします。外部で定義されたものと比較して、異なる動作。 __init__() 内で宣言された変数はインスタンス属性ですが、外部で定義された変数はクラス属性です。

インスタンス属性 (__init__() 内で 'self' で定義)

変数__init__() 内で先頭に self が付加されたものは、特定のオブジェクト インスタンスに関連付けられます。各インスタンスには、これらの変数の独自のコピーがあります。したがって、1 つのインスタンス内でこれらの変数に加えられた変更は、他のインスタンスには影響しません。

例:

<code class="python">class WithClass:
    def __init__(self):
        self.value = "Bob"

    def my_func(self):
        print(self.value)</code>

ここで、value はインスタンス属性です。 WithClass の各インスタンスは独自の値を持ちます。

クラス属性 (__init__ の外で定義)

__init__() の外で定義された変数はクラス属性です。これらの変数は、クラスのすべてのインスタンス間で共有されます。 1 つのインスタンス内でそれらに加えられた変更は、他のすべてのインスタンスに反映されます。

例:

<code class="python">class WithoutClass:
    value = "Bob"

    def my_func(self):
        print(self.value)</code>

この場合、value はクラス属性です。 WithoutClass のすべてのインスタンスは、同じ値の変数を参照します。

変数定義の結果

__init__() の内部または外部で変数を定義するかの選択は、必要な機能によって異なります。 :

  • インスタンス属性: 各インスタンスに独自の変数バージョンを持たせたい場合に使用します。
  • クラス属性:変数値をクラスのすべてのインスタンス間で共有する必要がある場合に使用します。

これらの属性を不適切に使用すると、予期しない動作やエラーが発生する可能性があります。たとえば、クラス属性であるべきときに属性をインスタンス属性として定義すると、変数のコピーが誤って複数作成され、パフォーマンスの問題やデータの不整合が発生する可能性があります。

以上が違いは何ですか: Python のインスタンス属性とクラス属性?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。