【Python】クラス変数とクラスメソッドの違い

python enumerate

この記事ではクラス変数とは何か、
それからクラスメソッドとは何か、
について例題を挙げて解説します。

そのあと、結局のところ
クラス変数とクラスメソッドって何が違うのか
解説していきたいと思います。

ちなみにクラスの概念については
オブジェクト指向のところで
詳しく解説していますので
気になる方は先にこちらの記事をご覧ください。
【Python入門】オブジェクト指向とは?例題を挙げながら解説

それでは本題に入っていきましょう。

スポンサードリンク




【Python】クラス変数とは?

クラス変数とは

クラス変数とはクラスの中で使う変数のことです。

「変数って何?」
と疑問に感じてしまう方は
先にこちらの記事をご覧ください。
Pythonの変数宣言で注意すべきこと
【Python入門】変数の代入についてわかりやすく解説

では例題1をご覧ください。

#例題1 クラス変数

class Animal: #ここはクラス
   bird = "Bird" #ここはクラス変数
   dog = 'Dog' #ここもクラス変数

print(Animal.bird) 

Animal.bird = '鳥' #ここでクラス変数の値を変更している
print(Animal.bird)

例題1を詳しくみていきましょう。

class Animal: #ここはクラス
   bird = "Bird" #ここはクラス変数
   dog = 'Dog' #ここもクラス変数

Animalというクラスの中で
変数bird、変数dogという2つの変数が定義されています。

Birdという文字列を変数birdに代入し
Dogという文字列を変数dogに代入します。

変数の代入についてはこちらの記事で詳しく解説しています。
【Python入門】変数の代入についてわかりやすく解説

こんな感じでAnimalというクラスの中で定義された
変数birdや変数dogのことをクラス変数といいます。

そのままですね。

『クラスの中の変数=クラス変数』
ですからね。

class クラス名: #ここはクラス
   変数名(クラス変数) = 変数に代入したい文字列や数 #ここはクラス変数

とすることで、クラス変数を定義することができるわけですね。

ところでクラス変数はクラス名からアクセスすることができます。

print(Animal.bird) 

ここではクラス変数birdにアクセスするために
クラス名Animalの後に、ドット(.)をつけてbirdと書いています。

birdの値をprintした後に、

Animal.bird = '鳥' #ここでクラス変数の値を変更している

変数birdに『鳥』という文字列を代入させています。

こんな感じでクラス変数の値って変更することができるんです。
ここはクラスメソッドとクラス変数の違いになります。

続いて

print(Animal.bird)

クラス変数の値を『鳥』に変更した後に
print文で表示させています。

例題1を実行してみましょう。

Bird

と表示されました。

クラス変数

例題1のポイントはクラス変数にアクセスして
クラス変数の値を変更できた点です。

スポンサードリンク




【Python】クラスメソッドとは?

クラスメソッドとは

続いてクラスメソッドについて解説していきますね。
クラスメソッドとはクラス名を使って呼び出すことができるメソッドのことをいいます。

そしてクラスメソッドを使う際のルールですが。
必ずメソッド名の前に『@classmethod』と記載する必要があります。

@(アットマーク)がついていますね。
たとえばaaa@yahoo.co.jp
みたいな感じでメールと関係してそうな気がする方もいるかもしれません。
別にメールフォームを開かせるようなものではないですよ(苦笑)

クラスメソッドについて理解するために例題2を
やっていきましょう。

#例題2 クラス変数

class Boxing: #ここはクラス
    nara = "Nara" 
    hantei = 'Hantei' #ここまでは例題1と同じ
    
    @classmethod
    def Aaa(cls):
        print(cls.nara, cls.hantei)
        
Boxing.Aaa()

例題2では

class Boxing: #ここはクラス
    nara = "Nara" 
    hantei = 'Hantei' #ここまでは例題1と同じ

となっていて、Boxingクラスに
naraとhanteiという変数が属しています。
naraとhanteiはクラス変数ですね。

ここまでは例題1と同じことをやっています。

で、ここからが重要です。

    @classmethod
    def Aaa(cls):
        print(cls.nara, cls.hantei)

とありますね。

@classmethod

がクラスメソッドです。

@classmethod

があることで、そのあとのメソッドがクラスメソッドになるんです。

これがクラスメソッドです。

    def Aaa(cls):

このクラスメソッドはclsを引数として受け取ります。
ちなみにclsはクラスそのものを意味しています。
なので、clsという文字をいじることはできません。

それから

        print(cls.nara, cls.hantei)

clsによって、クラス変数であるnaraやhanteiにアクセスしています。

あと

Boxing.Aaa()

クラスメソッドを呼び出すときにはクラス名(Boxing)から
直接呼び出します。

これがクラスメソッドです。

実行すると
Nara Hantei
と表示されます。

クラスメソッド

こんな感じでクラスメソッドが呼び出されて
クラス変数に代入された文字列(Nara Hantei)が表示されました。

スポンサードリンク




【Python】クラス変数とクラスメソッドの違いは?

クラス変数とクラスメソッドの違い

クラス変数とクラスメソッドの違いについて。
クラス変数はクラス内で定義された変数のことです。

クラス変数の値は後で変更することができます。
またクラス事態でクラス変数の値は保持されています。

それからクラスメソッドは@classmethodと記述した後に
記載されたメソッドのことです。

clsという引数を使うことでクラスにアクセスできます。

こんな感じでクラス変数とクラスメソッドは定義の仕方や
使い方が違います。

ただ、例題2のようにクラス変数とクラスメソッドは
共存することができます。

以上でクラス変数とクラスメソッドについての解説を終わります。

pythonを学ぶならこちらの動画講座がおすすめです

Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学び、実践的なアプリ開発の準備をする

かなり長い講座名ですね。
わかりにくそうな感じがします。

ですが、pythonの基礎からしっかりとわかりやすく教えてくれます。

また、きれいなコードを書くための方法についても
教えてくれるので、周りが「どうやってそんなコードを書いてるの?」
とびっくりされるようになるかもしれません。

それからWebアプリケーション開発の基本的なテクニックについても
教えてくれます。

なので、pythonを使ってwebアプリケーションを作ってみようと
思っている方にもおすすめです。

値段は時期によって違います。

詳しくはこちらをご覧ください。


みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習

この講座ではまずpythonの基礎を学びます。
次に人工知能について学んでいきます。

そして最終的にはpythonを使って文字認識や株価分析ができるような技術力が身につくようになっています。

単純に教科書的なpythonを学ぶのではなく
仕事でも使えるスキルを身につけたい方におすすめの講座です。

なのに値段は恐ろしいほど安いです。
時期によって値段は変動するので
詳しくはこちらをご覧ください。


Pythonで機械学習:scikit-learnで学ぶ識別入門

この動画講座は広島大学准教授の先生が担当しています。
機械学習が専門の先生です。

すごく深い知識が身につきます。
大学の先生の講義って難しそうってイメージがあるかもしれません。

でもそんなことはありません。
すごくわかりやすいです。

pythonで機械学習のスキルを身につけたい方におすすめです。
値段は時期によって違いますが、かなり、良心的な価格になっています。

詳しくはこちらをご覧ください。

関連記事

ページ上部へ戻る