バイオインフォ道場、くまぞうです。
人気のPythonで、クラスを使ったオブジェクト指向のプログラミングに挑戦してみましょう。他のプログラム言語を習得したり・活用するときにもきっと役に立つと思います。
スポンサーリンク
クラスとは
Pythonはオブジェクト指向のプログラム言語です。クラスとは、テンプレート(雛形)のようなものです。自分でクラスを定義して、変数・メソッドを追加することでオブジェクトを管理することができます。
クラスを作る
classキーワードを使ってクラスを定義します。
class MyClass:
pass # 何もしないクラス
my_class = MyClass() # クラスの生成
クラスを作る際のルール
クラス名は、CapWords形式(=最初大文字でその後はキャメルケース)で命名します。クラス定義内で変数やメソッドを定義します。
コンストラクタ・デストラクタ
インスタンスが生成されるときに、自動で呼び出されるメソッドをコンストラクタと呼びます。__init__という関数名で定義します。主に、初期化などの処理に使います。
python_class.py
#! /usr/local/bin/python
class MyClass:
def __init__(self, value):
self.value = value
def my_method(self):
print 'value = %d' % self.value
my_class = MyClass(100) # コンストラクタ呼ばれる
my_class.my_method()
動作確認
$ python python_class.py value = 100
反対に、インスタンスが削除されるときに、自動で呼び出されるメソッドをデストラクタと呼びます。__del__という関数名で定義します。主に、クリア処理に使います。
python_class.py
#! /usr/local/bin/python
class MyClass:
def __init__(self, value):
print 'constractor'
def __del__(self):
print 'destractor'
my_class = MyClass(100) # コンストラクタ呼ばれる
del my_class # デストラクタ呼ばれる
動作確認
$ python python_class.py constractor destractor
クラスのメソッド
クラスにメソッドを定義します。メソッドは必ず1つ以上の引数を持ちます。最初の引数はselfにします。
python_class.py
#! /usr/local/bin/python
class MyClass:
def my_method(self):
print('hello')
my_class = MyClass() # インスタンスの生成
my_class.my_method() # インスタンスでメソッドを呼び出す
動作確認
$ python python_class.py hello
クラスの拡張
クラスを継承することで、クラスの拡張が可能です。重複する機能を定義し直す無駄を省いたり、必要な属性や機能を追加できるなどの利点があります。
継承
基になるクラス名を拡張するクラス定義に書くことで、クラスを継承します。継承したクラスからは、基になった基底クラスの変数やメソッドを使うことができます。基底クラスの変数・関数の利用に関しては、superを利用します。メソッドのオーバーライドを使います。
python_class.py
#! /usr/local/bin/python
class MyClass(object):
def __init__(self, value):
self.value = value
def my_method(self):
self.print_value()
def print_value(self): # MyClass2で生成されるので、呼ばれない
print 'value = %d' % self.value
class MyClass2(MyClass):
def print_value(self): # オーバーライドで呼ばれる
print 'value = %d' % (self.value * 2)
my_class2 = MyClass2(100)
my_class2.my_method()
動作確認
$ python python_class.py value = 200
スポンサーリンク
![バイオインフォ 道場 [bioinfo-Dojo]](https://bioinfo-dojo.net/wp-content/uploads/2016/03/some_object_luca-bravo-alS7ewQ41M8-unsplash.jpg)

