カテゴリー
Python

クラス変数とクラスメソッドについて知ろう

この章ではクラス変数とクラスメソッドについて説明します。
「クラスについて知ろう」の「補足」では3つのオブジェクトであるbanks, banks2, banks3を作成しましたが、この中のzandaka変数は3つのオブジェクトであるbanks, banks2, banks3ごとに違った値を保持することができました。
クラス変数はオブジェクトが何個あってもクラスに共通の1つの変数です。
では例をみてみましょう。999 この例のクラス変数はgoukeiとzandaka です。
インスタンス変数はselfに関連付けされていましたが、クラス変数はclsに関連付けされて記述されます。
クラスメソッドはクラスメソッドにしたいメソッドの上に9を付けます。
そしてクラスメソッドの第一引数にはclsを記述します。
clsはクラス自身を意味します。
これはインスタンスメソッドがselfを付けるのと同じ理由です。
次にクラス変数へのアクセス方法について説明します。
クラス変数に値を入れたいのであれば9と言う形式で書きます。
例えばクラス変数zandakaに値を設定したい場合には9と書きます。
次にクラスメソッドへのアクセス方法について説明します
クラスメソッドにデータを入れたいのであれば9と言う形式で書きます。
例えばnyuukin メソッドにデータを入れたいのであれば9と書きます。
このようにクラス変数とクラスメソッドはオブジェクトを作成しないでもクラス名でアクセスすることができます。
この例では何回訪問したかをカウントするcountメソッドがありますが、このメソッドはgoukei変数にそのカウントした数が保存されます。
Bank.count()が2回書かれているので2個目のgoukei変数は2になります。
インスタンス変数みたいにオブジェクトごとにデータが変わることはなく、goukei変数はただ一つのデータだけを持ちます。
zandaka変数も同じ事です。
結果は以下の通りです。9

カテゴリー
Ruby

クラス変数について知ろう

この章ではクラス変数について説明します。
変数名の前に@@が付いた変数はクラス変数と呼ばれています。
クラス変数はインスタンス変数のようにインスタンスに属する変数と違ってクラスに属しています。
では例をみてみましょう。99999 前の章では変数名の前に@@が付いた変数はクラス変数であると説明しましたが、この例では@@count1がクラス変数です。このクラス変数はクラスの中のメソッドではない箇所で宣言します。
この例ではオブジェクトを2つ以下のように作っています。9 インスタンス変数の場合はこの2つのオブジェクト間ではインスタンス変数の値を共有できません。まったく別個のインスタンス変数になります。
これとは逆にクラス変数はクラスに属しているので、オブジェクトごとにクラス変数の値が変わるわけではありません。どんなに新しいオブジェクトを作成してもクラス変数を共有して使用することが出来ます。
以下の箇所ではオブジェクトを作成するたびにクラス変数であるcount1に1を足しています。9 そして、以下の箇所でそれぞれのオブジェクトでcountメソッドを呼び出していますが、出力するとクラス変数@@count1がカウントされているのが解ります。9 結果は以下の通りです。9