3.17. クラス作成

3.17.1. クラスの基礎

クラス定義は calss クラス名: と記述します。

以下の例では MyClassがクラス名です。2~7行目はクラスの定義です。

1
2
3
4
5
6
7
class MyClass:
    def __init__(self,val):
        self.mult=val
        print ('self.mult=', self.mult)
    def method1(self, val):
        print ('self.mult=', self.mult)
        print (val * self.mult)

クラス定義は一定の動作をするオブジェクトという部品のひな形となるものです。クラス定義からクラスのインスタンスであるオブジェクトを作成し、それを利用して様々な処理を記述することができます。

3.17.2. クラスの初期化

クラス定義の2行目に「__init__」というメソッドがあります。これは特殊なメソッドで、クラスからオブジェクトを作る場合に実行されるメソッドです。

続いて3,4行目ではvalと言う引数から、インスタンス変数のself.multに値を代入します。インスタンス変数は生成された各オブジェクト毎に固有の値として保持され、以後self.multで参照できます。

3.17.3.  クラスの利用

以下では、上で定義したクラスを使った処理の例をみながら、クラスの具体的な動作を説明します。

1
2
3
4
multiply10 = MyClass(10)
multiply100 = MyClass(100)
multiply10.method1(2)
multiply100.method1(3)

1行目と2行目でMyClassクラスを使ってmultiply10とmultiply100というオブジェクトを作っています。 ここで、MyClass(10)という記述はMyClassを使ってオブジェクトを作成しパラメータ10を指定してそのオブジェクトを初期化することを意味しています。MyClass(10)によって作られるオブジェクトを「クラスのインスタンス」と言うこともあります。 multiply10はMyClass(10)で初期化され、myltiply100はMyClass(100)で初期化したMyClassのインスタンスである、ということになります。 クラスの初期化は以下のように行われます。multiply10はMyClass(10)で初期化しますが、この時クラス定義の方の __init(self,val) 以下のメソッドが実行され、valには10が割り当てられます。したがって、3行目で self.mult に10 が代入されます。 multiply10のself.multは10, multiply100のself.multには100が代入されることになります。 3行目では上で初期化したクラスのメソッドが呼ばれていますが、multiply10のself.multには先に確認したように10が入っていますので、method1(2)では20が表示されます。multiply100.method(3)ではself.multが100ですからら300が表示されます。

self.mult= 10
self.mult= 100
self.mult= 10
20
self.mult= 100
300