Pythonにおけるクラスの定義方法から、コンストラクタ・メソッド・クラス変数/インスタンス変数まで、初心者向けに分かりやすく解説します。
このページを理解できれば、Pythonでクラスを用いて簡単なコーディングができるようになるよう丁寧に解説します。
オブジェクト指向の基礎がイマイチよくわかっていない方でも大丈夫です。1から分かりやすく解説していきますので、是非最後までご覧ください。
Python:クラスの定義方法
まずは、クラスの定義方法です。
class (クラス名称):
クラスの実装①
クラスの実装②
・・・・
class TestClass: pass # pass については以下で解説
「class」に続けて、任意のクラス名を記述すればOK。これだけでクラスの定義ができます。
尚、クラスの実装内容は、"class" よりも1つインデントを下げて記述する必要があります。(これは、Python共通の仕組みです。詳細は「Python:基本文法」をご覧ください。)
クラスの命名時に気を付けるポイントは以下の通り。
インスタンスの生成(インスタンス化)
インスタンスの生成(インスタンス化)とは、クラスからオブジェクトを生成することです。
どういうことか。
クラスは、あくまでも「どのようなものか?を定義した設計書」にすぎません。クラスとインスタンスを、車で例えると以下のような感じ。
つまり、クラスを定義しただけでは、まだ実際に「もの」は作られていないということ。インスタンス化をすることによって、はじめて「もの」が作成されるわけです。
したがってクラスを利用する場合には、必ずインスタンス化が必要になります。
インスタンスの生成は非常に簡単。「インスタンス = クラス名()」とするだけ。
class SampleClass1 : pass aaa = SampleClass1() # インスタンス化
これで、クラス"SampleClass1"を基にした実態―インスタンス "aaa" が生成されます。
class SampleClass1 : pass aaa = SampleClass1() # インスタンス化 bbb = SampleClass1() # インスタンス化
上記のように1つのクラスから複数のインスタンスを生成することも可能です。
これでクラスとインスタンスの基本理解はOK。
ここからは、クラスの中身(メソッドやコンストラクタ)について解説していきます。
Python:メソッド
まずは、メソッドの実装方法。メソッドと言っても、考え方は関数と全く同じ。
クラス内に定義された関数をメソッドと呼んでいるだけです。
# これは「関数」 def sample_function(): print('Hello World!') class SampleClass: # これは「メソッド」 def sample_method(): print('Hello World!')
複数の処理を1つにまとめて名前を付けたものです。

Pythonでは、def文を用いて関数を定義します。
本ページでは、以下のページで解説している「引数」や「戻り値」に関する基本知識があると理解が進みます。自身がない方は一度ご覧になってから戻ってきてみてください。
ただし、普通の関数とメソッドで1点だけ異なるのが、メソッドは必ず1つ以上の引数を持つということです。
どういうことか。構文ルールとサンプルコードを学習しながら、合わせて解説していきます。
メソッドの定義
def メソッド名 (self, 引数):
メソッドの実装①
メソッドの実装②
・・・・
メソッドの呼び出し
インスタンス名 .メソッド名()
class SampleClass1 : def method1(self): print("Hello World!") instance = SampleClass1() # インスタンス化 instance.method1() # メソッドの呼び出し # 結果 ⇒ Hello World!
メソッドを定義する際には、かならず "self" という引数を指定する必要があります。この "self" というのは、インスタンス自身を表す引数で、必ず1番初めの引数として記述します。
※必ずしも"self"でなければいけないわけではありません。キーワードは何でもOK(this や myselfなど)。ただし、Pythonエンジニアの慣例として"self"と記述することがほぼ決まっています。他の人でも理解できるように基本"self"と記述するようにしましょう。
この解説だけでは"self"がなにものなのか、正直まだよくわからない方もいらっしゃるかと思います。
"self" については、初心者向けにもう少し詳しく説明します。
"self" が分からない!という方へ
先ほど "self" はインスタンス自身を表す引数であると説明しました。これがどういうことかを、実際のコードで説明します。
class SampleClass: # メソッド1「引数messageの値を表示する」 def s_method1(self,message): print(message) # メソッド2「メソッド1を呼び出す」 def s_method2(self): self.s_method1("Hello World!") ins = SampleClass() # インスタンス化 ins.s_method2() # メソッドの呼び出し # 結果 ⇒ Hello World!
このプログラムを2つに分解してみてみましょう。 まずはこの部分。
# メソッド1「引数messageの値を表示する」 def s_method1(self,message): print(message)
メソッド "s_method1" では、画面に引数 "message" の値を出力する処理を定義しています。
先ほど、解説した通りメソッドには必ず第1引数として、"self" を指定する必要があるのでした。
次にこの部分。
# メソッド2「メソッド1を呼び出す」 def s_method2(self): self.s_method1("Hello World!")
メソッド "s_method2" の処理は、先ほど定義した "s_method1" の呼び出し。引数 "message" には文字列 "Hello World!" を渡しています。
注目していただきたいのがメソッドの呼び出し部分「self.s_method1("Hello World!")」です。
先ほど解説した通り、メソッドの呼び出し時には必ずインスタンスを指定する必要があります。
メソッドの呼び出し
インスタンス名 .メソッド名()
instance.method1() # メソッドの呼び出し
ただし、クラスの中ではまだインスタンスが生成されていません。そのために必要なのが仮のインスタンス名の役割を担う "self" です。この "self" はこのクラス自身を表しているとも説明できます。
「self.s_method1("Hello World!") 」を日本語に直すと「このクラスの中の、s_method1を呼び出すよ!」ということ。
これで、なんとなく "self" の意味が分かったのではないでしょうか?
今すぐにはわからなくても、"self" はメソッドを定義する際に必ず第1引数に指定する必要があると理解しておけばOKです。
class Human: def __init__(self,name): self.name = name yamada = Human('山田') tanaka = Human('田中') print(yamada.name) print(tanaka.name) # 山田 # 田中
ここまでで、クラス・メソッド(self)の理解はOK。次は、コンストラクタについて。
Python:コンストラクタ
コンストラクタは、オブジェクトが生成される時に一度だけ実行されるメソッドのことです。基本的には、初期化を目的として利用されます。
基本的にはメソッドの考え方が理解できていればOK。オブジェクトが生成されるときに実行されるということがどういうことかが説明できるようになれば、コンストラクタも理解できます。
def __init__(self,引数,引数):
コンストラクタは「 __init__ 」という名前で固定です。init の前後に "_"(アンダーバー)2つです。
class SampleClass(): def __init__(self): self.aaa = 2020 self.bbb = "Hello World" ins = SampleClass() print(ins.aaa) print(ins.bbb) # 結果 ⇒ 2020 # 結果 ⇒ Hello World
コンストラクタで、変数 "aaa" と変数 "bbb" を宣言。その後で、その中身を表示するだけのコードです。
インスタンスが生成される時点で、変数”aaa” "bbb" にそれぞれの値を格納しています。
次に、以下のコードをご覧ください。
class SampleClass(): aaa = 2021 # 変数の初期値 ⇒ 2021 def __init__(self): self.aaa = 2020 ins = SampleClass() print(ins.aaa) # 結果 ⇒ 2020
結果は「2020」が表示されます。
これは、インスタンスが呼び出された時点で、自動的にコンストラクタが実行されるためです。すなわち、変数"aaa"は「2020」で上書きされるのです。
これが、コンストラクタという概念です。簡単ですね。
Python:デストラクタ
コンストラクタの反対、インスタンスが破棄されるタイミングで一度だけ呼び出されるメソッドです。
class SampleClass(): # コンストラクタ def __init__(self): self.aaa = 2020 self.bbb = "Hello World" # デストラクタ def __del__(self): print("さようなら") ins = SampleClass() print(ins.aaa) print(ins.bbb) del ins # インスタンスの破棄 # 結果 2020 Hello World さようなら
「del ins」―。インスタンスを破棄したタイミングで、デストラクタの処理「print('さようなら')」の処理が動きます。
そのため、画面に「さようなら」という文字が表示される結果となります。
クラス内で利用できる変数
Pythonのクラスの中で利用できる変数は大きく2種類に分解できます。
1つが、クラス変数。もう1つが、インスタンス変数です。
クラス変数
クラス変数は、クラス内で定義する変数のことで、全てのインスタンスで共通となる変数です。
クラスの定義文直下に記述することで、クラス変数になります。
class SampleClass: a = 'Hello World!' # クラス変数 def s_method1(self): print(self.a) ins1 = SampleClass() # インスタンス1 ins1.s_method2() ins2 = SampleClass() # インスタンス2 ins2.s_method2() # 結果 Hello World! Hello World!
異なるインスタンス(ins1 / ins2)でも、同じ「Hello World!」として出力されていることが分かります。
インスタンス変数
インスタンス変数は、クラス変数と異なりインスタンスに依存する変数です。つまり、インスタンスごとに異なる値になる変数です。
インスタンス変数は、メソッドの直下で "self" の属性として定義します。
class SampleClass(): # コンストラクタ def __init__(self,aaa): self.aaa = aaa # 引数aaaの値をインスタンス変数の初期値とする ins1 = SampleClass("Hello!") # 引数aaaに「Hello!」を渡す print(ins1.aaa) ins2 = SampleClass("Good Bye!") # 引数aaaに「Good Bye!」を渡す print(ins2.aaa) # 結果 Hello! Good BYe!
インスタンス変数は、インスタンスごとに異なる値となっていることが分かります。クラス変数とインスタンス変数の違いは丁寧に理解しておきましょう。
そして最後に「継承」について説明します。
Python:継承
継承とは、他のクラスと同じメソッドとインスタンス変数を持つクラスを定義することです。
既に定義済のクラスの内容を引き継いで新たなクラスを定義するイメージでOK。
class クラス名(継承するクラス名):
クラスの実装①
クラスの実装②
・・・・
class SampleClass: a = 'Hello World!' def s_method1(self): print(self.a) class Child(SampleClass): # 「SampleClass」を継承して「Child」クラスを定義 pass ins = Child() # インスタンス化 ins.s_method1() # メソッドの呼び出し # 結果 ⇒ Hello World!
ハイライト行が継承部分です。
「SampleClass」を継承して「Child」クラスを定義しています。「Child」クラス自体は、中身はからっぽにしてあります。
ですが、この「Child」クラスは、「SampleClass」を継承しているため、「SampleClass」のメソッドを備えています。そのため、画面に Hello World! を表示することができているのです。
復習としてもう1つサンプルコードを載せておきます。
class Human: def __init__(self,name): self.name = name class Child(Human): pass yamada = Child('山田') print(yamada.name) # 山田
多重継承
Pythonでは、複数のクラスから継承することも可能です。これを多重継承と呼びます。
class クラス名(継承するクラス名1, 継承するクラス名1,・・・ ):
クラスの実装①
クラスの実装②
・・・・
継承したいクラス名を「,(カンマ)」で区切るだけ。
class SampleClass1: # クラス1 a = 'Hello World!' def s_method1(self): print(self.a) class SampleClass2: # クラス2 b = 'Good Bye!' def s_method2(self): print(self.b) class Child(SampleClass1,SampleClass2): # クラス1,2を親としてchildクラスを定義 pass ins = Child() ins.s_method1() ins.s_method2() # 結果 Hello World! Good Bye!
これで、Pythonにおけるクラスの解説は以上です。
以下のコードの意味が分かれば、Pythonにおけるクラス定義の基礎はOK。
class Human: def __init__(self,name): self.name = name def SayHello(self): a = "こんにちは。私は{0}です".format(self.name) print(a) class Child(Human): pass yamada = Child('山田') yamada.SayHello() # こんにちは。私は山田です。
Pythonを1から学習したい方は
Pythonをより実践的に学びたい―。実際にコーディングをしながら学びたい―。独学に限界を感じている―。
そんな方には、無料体験/オンライン完結もあるプログラミングスクールで学ぶのがおすすめです。都度検索しながら知識を補完していくのではなく、1から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。
各プログラミングスクールの特徴をまとめた記事をこちらに記載しておきますので、是非ご覧ください。