Pythonのクラス属性とインスタンス属性の違いや使い方について詳しく解説する

スポンサーリンク

今回は、PythonのClass AttributeとInstance Attributeを取り上げます。

属性は、プログラミング言語のキープレイヤーです。

重要なデータの値を保持し、データ操作の手助けをする役割を担っています。

では、さっそく始めましょう

スポンサーリンク

Pythonのクラス属性を理解する

Pythonクラス属性`は、クラスで囲まれた属性/変数です。

つまり、そのスコープはPythonのクラスの中にあります。

クラス属性はそれ自身のコピーを1つだけ作成し、この1つのコピーはその特定のクラス内のすべての関数やオブジェクトによって共有され、利用されます。

構文は以下の様な感じです。

class Class-name:
     variable = value

では、以下の例でその実装を理解しましょう。

クラス属性の実装とその例

class class_attribute:
    val = 1
 
    def product(self):
        class_attribute.val *= 10
        print(class_attribute.val)
 
obj1 = class_attribute()
obj1.product()      
  
obj2 = class_attribute()
obj2.product()      

この例では、クラス変数valを作成し、1に初期化します。

さらに、関数product()の中で変数valにアクセスし、その値に10を掛けて操作しています。

明らかに観察されるように、変数’val’の同じコピーは、作成された両方のオブジェクトで使用されます。

したがって、最初はval = 1です。

オブジェクトobj1がこの関数を呼び出すと、valの同じコピーが使われ(値はリセットされない)、val=10になります。

obj2が呼び出すと、valはval10、つまり1010=100になる。

結果を出力すると、以下の様になります。

10
100

Python Instance Attribute を理解する

Python Instance attribute` はローカルな属性/変数で、そのスコープはその属性を使用している特定の関数内にあります。

したがって、特定の関数によって囲まれています。

インスタンス属性は、関数やオブジェクトから呼び出されるたびに、それ自身の新しいコピーを作成します。

つまり、オブジェクトや関数がこの変数にアクセスしようとするたびに、この変数の個別のコピーが使用されることになります。

構文は以下の様な感じです。

def function-name():
    variable = value

では、ローカル属性の実装を例にとって説明しよう。

Instance Attributeの実装とその例

class instance_attribute:
 
    def product(self):
       val = 20
       val *= 10
       print(val)
 
 
obj1 = instance_attribute()
obj1.product()      
  
obj2 = instance_attribute()
obj2.product()

この例では、インスタンス属性を val = 20 として宣言し、初期化しました。

さらに、obj1が関数を通してこの変数にアクセスしようとすると、それ自身の新しいコピーを作成し、デフォルト値を初期化された値にリセットしてからアクセスできるようにします。

obj2 がインスタンス変数 ‘val’ にアクセスしようとすると、同じシナリオが繰り返されます。

結果は以下の通りです。

200
200

まとめ

ここまでで、このトピックは終了です。

ご不明な点がありましたら、お気軽にコメントください。

タイトルとURLをコピーしました