Pythonにおけるclass(クラス)とは?
Pythonはオブジェクト指向プログラミングをサポートしている言語であり、そのためには"クラス"を定義、作成することが必要になってきます。
「オブジェクト指向...苦手なんです。。」
苦手な方多いですよね。
ここではざっくりとある種類に分けた"モノ"の集まりだと思ってください。
「"モノ"っていうのは例えば僕が使っているパソコンですか?」
「そういうことです。パソコンは”電子機械”ですよね?他にも”電子機械”はスマホやタブレットもありますね。この例でいうと「電子機械」というクラスということになります。」
「あ!”モノ”のまとまりってそういうことだったんですね!なんとなくわかってきました♪」
Pythonでのクラス定義はその他のプログラミング言語と比べると比較的簡単に行えるようになっています。
早速その"クラス(class)"というものを見ていきましょう。
class(クラス)の定義の仕方
Pythonではクラスの定義にclass文というものを使います。
class文を使った定義の仕方をサンプルコードで見ていきましょう。
# クラスの定義
class クラス名:
たったこれだけなんです。
class文の後にそのクラスの名前となる任意のクラス名をつけて、最後に「 : 」をつけてあげます。
そのあとに一段落インデントを入れることでクラス定義をしていきます。
# クラスの定義
class TestClass:
pass
このようにインデントを入れて記述していくと"クラス"として判別してくれます。
コンストラクタとは
コンストラクタとは、インスタンス(実体)が生成されるときに自動的に呼び出されるメソッドのことを指しています。
コンストラクタを定義する方法は" init "という名前のメソッドを作成します。
class Test:
#コンストラクタの定義
def __init__(self, 引数1, 引数2, ….):
このinit(コンストラクタ)には必ずselfという引数が必要になります。
それ以外にも引数をつけることができ、その引数はインスタンスを生成する際にクラスを呼び出す時の引数が渡されます。
実際にコンストラクタに引数を追加して呼び出してみましょう!
class Test:
# コンストラクタ
def __init__(self, num):
#このクラスの持つ「number」変数に引数を格納
self.number = num;
def print_num(self):
print('引数で渡された数字は{}です。'.format(self.num))
# Testクラスのインスタンスを作成
test = Test(10)
test.print_num()
このサンプルコードを少し解説すると、
まず”Test”という引数が一つ有るクラスを作成します。(1行目)
このTestクラスは渡された引数を表示できるメソッドを保持しています。(7行目)
次に、Testクラスのインスタンスを作る時に、引数として"10"を渡しています。(11行目)
そしてTestクラスの持っている"print_num"メソッドを呼び出すと、(12行目)
引数で渡された数字は10です。という実行結果になります。
「コンストラクタについて一言で説明すると、「インスタンスを作成するときに呼ばれる関数」と覚えておくといいですよ♪」
デストラクタとは
次に、デストラクタについてです。
コンストラクタとは逆で、インスタンスが不必要になり削除される時に呼ばれるメソッドのことを”デストラクタ”と言います。
デストラクタは” del ”という名前のメソッドで定義することができます。
class Test:
# コンストラクタの宣言
def __init__(self):
print('コンストラクタが呼ばれました')
# デストラクタの宣言
def __del__(self):
print('デストラクタが呼ばれました')
#インスタンスを生成 → コンストラクタが呼ばれる
test = Test()
# インスタンスを削除 → デストラクタが呼ばれる
del test
このように、定義の仕方はコンストラクタと似ています。
クラス内に" del "という関数を作り、インスタンスが削除されるときに呼ばれる。
継承とは
次に"継承"についてです。
継承とは、あるクラスを他のクラスでも活用し機能拡張したクラスを作りたい場合などに活用することができます。
Pythonのクラスも他のクラスを継承して拡張することができ、クラスを継承する場合はクラス文に親となるクラスを指定します。
親のクラスのメソッドを呼び出す場合は”super()”関数を使います。
# 基本クラス
class Test:
def __init__(self, num):
self.num = num;
def print_num(self):
print('引数で渡された数字は{}です。'.format(self.num))
# 上のTestクラスを継承したTest2クラス
class Test2(Test):
def print_test2_info(self):
print('このクラスはTestクラスを継承しています。')
super().print_num() #親クラスのprint_num()を呼び出す
test = Test2(10)
test.print_test2_info()
このように基本クラスであるTestクラスを継承したTest2クラスは"super()"関数を使うことで、基本クラスの関数を使うことができます。
「継承を活用することで、基本は同じ処理をするけど細かいところでそれぞれの機能にあった処理をしたい場合などにとても便利な機能なので、ぜひ覚えておいてください!」
まとめ
今回は、class(クラス)について解説しました。
大きく分けて、
- クラスとは?
- コンストラクタ/デストラクタについて
- 継承について
を押さえておけば基本はばっちりです。
あとはそのクラスをどのように応用し活用していくか。皆さんの手腕が問われます!
がんばって素晴らしいプログラムを組んでください♪