Day 84クラス変数とインスタンス変数の違い
Pythonコード
1class Person:2 country = 'Japan'3 def __init__(self, name, age):4 self.name = name5 self.age = age6 def greet(self):7 print(f'{self.name}({self.age})からこんにちは!')8p = Person('山田', 25)9print(p.country)10p.country = 'USA'11print(p.country)12print(Person.country)13q = Person('田中', 30)14print(q.country)
解説
- 行1〜2: クラスPersonを定義し、クラス変数countryに'Japan'を代入します。クラス変数はクラス全体で共有されます。
- 行3〜5: コンストラクタ__init__でインスタンス変数nameとageを定義します。インスタンス変数は各インスタンスごとに異なる値を持ちます。
- 行6〜7: メソッドgreetを定義します。このメソッドは、インスタンスの名前と年齢を出力します。print()関数は、指定された値を画面に表示する組み込み関数です。
- 行8: Personクラスのインスタンスpを作成し、クラス変数countryの値を出力します。
- 行9: インスタンスpにインスタンス変数countryを追加し、'USA'を代入します。インスタンス変数countryはクラス変数countryと異なる値を持ちます。
- 行10〜11: インスタンスpのcountryとクラスPersonのcountryの値を出力します。クラス変数countryは変更されていないことがわかります。
- 行12: Personクラスの別のインスタンスqを作成し、クラス変数countryの値を出力します。
次に試してみよう
- クラス変数とインスタンス変数の違いを確認するために、別のクラスを作成してみましょう。
- クラス変数を変更するメソッドを作成してみましょう。
- インスタンス変数を変更するメソッドを作成してみましょう。