Pythonのクラスとは
Pythonにはクラスという機能があります。このクラスを理解するためには、オブジェクト指向とは何かについても知る必要があります。
オブジェクト指向とは、基本的にオブジェクト(物)で構成されたプログラミング言語の種類のことを言います。Pythonではクラスや関数もすべて「オブジェクト」として扱われます。
そして、今回のメインであるクラスを元にして新しくオブジェクトを生成することが出来ます。
さらにオブジェクト指向についての知識を深めてからクラスについて学習していきましょう!
Pythonのクラスの使い方
では、オブジェクト指向についての基本を学んだら、実際にPythonでクラスを作ってみましょう。
クラスの基本的な構文
Pythonにおけるクラスの基本的な構文はこのようになっています。
class ClassName():
def __init__(self, ):
hogehoge
小文字の「class」の後に、好きなクラス名を指定しましょう。
関数では「def」で定義をしていましたが、ここでは「class」になります。引数は、今回は空欄にしておきましょう。
そしてclassから始まる構文の内部に「__init__」という関数が定義されています。これはコンストラクタという、クラスの中でも重要な機能になります。
コンストラクタについては次の章で解説します。
コンストラクタとは
コンストラクタとは、「__init__」という名前の部分です。コンストラクタは、インスタンスを作成する際に重要な処理を含むものです。
どのように生成するか、どのようなデータを持たせるかなど、といった情報を定義するのに必要なメソッドになります。
引数にselfというものがあるのに注意してください。selfとはインスタンス自身を指し、基本的にはこの引数は必須なので忘れないように気を付けてくださいね。
では実際にクラスを作成してみましょう。こちらのコードを見てみましょう。
class MyClass():
def __init__(self, message):
self.value = message
myinstance = MyClass("Hello!")
print(myinstance.value)
実行結果
Hello!
こちらのコードでは、コンストラクタの引数にselfとmessageを指定しました。このインスタンスのデータにmessageを追加したいので、valueという属性(アトリビュート)を追加し、第二引数のmessageを代入したのです。
そしてインスタンスを生成するために、インスタンスを代入する変数名 = クラス名(引数)と、呼び出しました。ご覧いただけるように、ちゃんと「Hello!」と表示されましたね。
メソッドとは
コンストラクタという特別なメソッドの定義方法をご紹介しました。この章では、インスタンスの振る舞いや行動を表現するメソッドの定義方法をご紹介したいと思います。
メソッドとは、クラス内に定義された関数のことです。メソッドは定義されたクラスからしか呼び出すことが出来ないのも、特徴の一つです。
class Example():
def __init__(self, a,b,c):
self.num1 = a
self.num2 = b
self.num3 = c
def print_tot(self):
tot = self.num1+self.num2+self.num3
print(tot)
myinstance = Example(1,2,3)
myinstance.print_tot()
実行結果
6
上のコードでは、Exampleという名前のクラスを定義しました。Exampleはコンストラクタとprint_totというメソッドのみを含んでいます。
コンストラクタでは引数に指定したa、b、cを属性num1、num2、num3に代入しています。そして、print_totは生成したインスタンスが持つ属性三つの合計を計算し、出力します。
実際、myinstanceを引数1、2、3で作成したところ、合計は6と表示されました。
継承とは
プログラムを書いていると、あるクラスを元にその派生クラスを作りたい場合があると思います。そのようなケースでは、継承を使用すると便利です。
class Oya():
def oya_func(self):
print("I am OYA")
class Kodomo(Oya):
def kodomo_func(self):
print("I am Kodomo")
k = Kodomo()
k.oya_func()
k.kodomo_func()
実行結果
I am OYA
I am Kodomo
こちらのコードでは、Oyaクラスを元にKodomoクラスを作成しました。継承では、継承先となる子クラスの引数に、親クラスを渡しています。
継承を行っているので、Kodomoクラスのインスタンスは自分が所有しているkodomo_funcというメソッドに加え、Oyaクラスのoya_funcまでも呼び出せるのです。