クラスの文法
「クラス」は、「設計図」のようなものでそれ自体では何もできません。そのクラスをもとに作った「インスタンス(実体)」を使って操作することができる文法です。大抵のプログラミング言語にはクラスがあり、クラスを使ったプログラミングを「オブジェクト指向プログラミング」と呼びます。
この連載では用意されたクラスを使うことはありますが、オリジナルのクラスを作ることはありません。ですが、今後何かの役に立つように一応クラスの解説もしておきます。

メソッドとプロパティとインスタンスの生成
クラスには主に「メソッド」と「プロパティ」があり、他にも「クラスメソッド」や「スタティックメソッド」などもあります。メソッドとはクラスに属する「関数」のようなもので、プロパティとはクラスに属する「変数」のようなものです。
次のサンプルコード「classAdd.py」のようにここでは「Add」クラスでは、初期化の「__init__」メソッドと、プロパティの「self.sum」と、「plus」メソッドで構成されています。「変数 = クラス名()」でAddクラスのインスタンスを生成し「ins」変数に代入します。「インスタンス変数.メソッド名(引数)」でクラスのメソッドを呼び出します。メソッドは関数のようにクラス内で「def」で宣言し、第一引数は必ず「self」です。プロパティはクラス内では「self.プロパティ名」で変数のように代入や取得ができます。
class Add: def __init__(self): self.sum = 10 def plus(self,num): self.sum += num return self.sum if __name__ == "__main__": ins = Add() sum = ins.plus(10) print(sum)
継承とオーバーライド
先ほどのclassAdd.pyが同じディレクトリにあるものとして「derive.py」をコーディングします。「from モジュール名 import クラス名」でモジュールを呼び出します。先ほどのclassAdd.pyファイルをモジュールとして読み込みますが、classAdd.pyの「if __name__ == "__main__":」の部分はderive.pyがメインのファイルなので実行されません。
「class 子クラス名(親クラス名):」で親クラスを継承した子クラスを宣言します。子クラスでは親クラスのplusメソッドやsumプロパティが使えます。__init__メソッドは親のAddクラスを上書き(オーバーライド)するので、親の__init__は明示的に「super().__init__()」を呼び出さないと実行されません。クラスのプロパティは「インスタンス変数.プロパティ名」で代入や取得ができます。
from classAdd import Add class NewAdd(Add): def __init__(self): super().__init__() def plus_plus(self,num): self.plus(num) self.plus(num) ins = NewAdd() ins.plus_plus(10) print(ins.sum)
クラスメソッド
クラスメソッドはクラスのメソッドとは違って、インスタンスを生成することなく「クラス名.クラスメソッド名()」といきなりクラスメソッドを呼び出すことができます。
またクラスメソッドではクラスのプロパティも使えますが、他のインスタンスで保持するプロパティの値とは別になります。これはインスタンスが異なれば同じクラスでも別の値を保持するのと同じです。
class Add: sum = 10 def plus(self,num): self.sum += num return self.sum @classmethod def plus2(cls,num): cls.sum += num return cls.sum if __name__ == "__main__": ins = Add() sum = ins.plus(10) print(sum) sum = Add.plus2(10) print(sum)
おわりに
今回はWebアプリのバックエンドで使うPythonの最低限知っておくべき文法を解説しました。次回はWebアプリのバックエンドを使ってWebページを表示する解説をします。