1.2.9. オブジェクト指向プログラミング (OOP)

Python はオブジェクト指向プログラミング (OOP) をサポートしています. OOP のゴールは:

  • コードをまとめる, そして

  • 似たような文脈でコードを再利用する.

ここに簡単な例があります: 例では Student class を作ります. これは独自の関数(メソッド) と変数(属性)を集めたオブジェクトで, こうやって使うことができます:

>>> class Student(object):
... def __init__(self, name):
... self.name = name
... def set_age(self, age):
... self.age = age
... def set_major(self, major):
... self.major = major
...
>>> anna = Student('anna')
>>> anna.set_age(21)
>>> anna.set_major('physics')

上の例では, Student クラスは __init__, set_age そして set_major メソッドを持っています. 属性としては name, age そして major です. メソッドと属性は以下の記法で呼び出すことができます: classinstance.method または classinstance.attribute__init__ コンストラクタは特別なメソッドで MyClass(オプションとして初期化のためのパラメータ) のようにして呼びます.

さて, さきほどのクラスと新しい同じメソッドと属性を持った新しいクラス MasterStudent を作りたいとします, しかし新しいクラスには internship 属性が加えられます. 継承 することで, さきほどのクラスをコピーペーストする必要はなくなります:

>>> class MasterStudent(Student):
... internship = 'mandatory, from March to June'
...
>>> james = MasterStudent('james')
>>> james.internship
'mandatory, from March to June'
>>> james.set_age(23)
>>> james.age
23

MasterStudent クラスは Student から属性とメソッドを継承しています.

クラスとオブジェクト指向プログラミングの恩恵を受けることで, 我々が遭遇する様々なオブジェクト(Experiment, Image, Flow など)に対応して独自のメソッドや属性を持った, 様々なクラスにコードをまとめることができます. さらに継承を使うことで基底クラスを中心とした変種を考える, コードを 再利用 できます. 例: Flow 基底クラスから, StokesFlow, TurbulentFlow, PotentialFlow を作るなど.