ホームページ >バックエンド開発 >Python チュートリアル >違いは何ですか: 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 サイトの他の関連記事を参照してください。